1 条题解

  • 3
    @ 2024-1-5 16:13:37
    思路 只需要预处理出1到mod-1的所有逆元,假设$f[i]$记录前i个数乘积模mod结果,之后对于每一次询问,答案就是$f[r]*inv[f[l-1]]%mod;$
    代码
    
    #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; }

    </p>
    • 1

    信息

    ID
    636
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    (无)
    递交数
    125
    已通过
    72
    上传者