#include<bits/stdc++.h>
using ll = long long;
using namespace std;
const int N = 1e6 + 10;
const int mod = 1145141;
int a[N],inv[N];
int qmi(int a,int b){
int res = 1;
while(b){
if(b & 1)
res = res * a % mod;
a = a*a % mod;
b >>= 1;
}
return res;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,q;
cin >> n >> q;
a[0] = 1;
inv[0] = qmi(1,mod - 2);
for(int i = 1; i <= n; i++){
cin >> a[i];
a[i] = a[i-1] * a[i] % mod;
a[i] %= mod;
inv[i] = qmi(a[i],mod - 2);
}
int l,r;
l = 1,r = n;
int ans = 0;
while(q--){
cin >> l >> r;
int s = a[r] * inv[l - 1]%mod;
ans ^= s;
}
cout << ans << '\n';
return 0;
}
B3645 数列前缀和 前缀积,快速幂,逆元
最新推荐文章于 2024-07-22 09:38:37 发布