1 条题解

  • 0
    @ 2026-10-25 19:01:15

    思路

    32个正数在素数模下分半乘积统计,非零模元用逆元配对,重复输入按下标计数,目标1必须排除空集。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    long long modpow(long long a,long long e,long long p){long long z=1;while(e){if(e&1)z=z*a%p;a=a*a%p;e>>=1;}return z;}int main(){int n;long long p,c;cin>>n>>p>>c;vector<long long>a(n);for(auto &x:a)cin>>x;if(c>=p){cout<<0<<'\n';return 0;}vector<long long>l={1},r={1};for(int i=0;i<n;i++){auto &v=(i<n/2?l:r);int k=v.size();for(int j=0;j<k;j++)v.push_back(v[j]*a[i]%p);}sort(l.begin(),l.end());long long ans=0;for(long long x:r){long long target=c*modpow(x,p-2,p)%p;ans+=upper_bound(l.begin(),l.end(),target)-lower_bound(l.begin(),l.end(),target);}if(c==1)ans--;cout<<ans%1000000007<<'\n';}
    
    • 1

    信息

    ID
    1415
    时间
    1000ms
    内存
    256MiB
    难度
    普及+
    标签
    递交数
    1
    已通过
    1
    上传者