1 条题解
-
3
思路
只需要预处理出1到mod-1的所有逆元,假设$f[i]$记录前i个数乘积模mod结果,之后对于每一次询问,答案就是$f[r]*inv[f[l-1]]%mod;$代码
</p>#include<bits/stdc++.h> using namespace std; const int mod=1145141; long long n,q,anss=0; long long a[1000004],f[1000004],inv[1145143];
int main() { cin>>n>>q; f[0]=1; for(int i=1;i<=n;i++) { cin>>a[i]; f[i]=f[i-1]*a[i]%mod; } inv[1]=1; for(int i=2;i<mod;i++) { long long k=mod/i,r=mod%i; inv[i]=(mod-k)*inv[r]%mod; } while(q--) { int l,r; cin>>l>>r; long long aa; aa=f[r]*inv[f[l-1]]%mod; //cout<<aa<<endl; anss^=aa; } cout<<anss; }
- 1
信息
- ID
- 636
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 125
- 已通过
- 72
- 上传者