标签:记录 click sans style onclick none long gcc pac
小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c。但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来。你能帮他计算一下一共有多少种取数方案吗?请把最后的方案数模1000000007后输出。
小B记得他至少取了一个数。
2 7 2
1 2
2
%:pragma GCC optimize(2) #include<bits/stdc++.h> #define int long long #define czx 1000000007 using namespace std; int ans=0,a[50],n,p,c,m; map <int,int> mp; int pow(int a){ int res=1,b=p-2; while (b){ if (b&1) res=(res*a)%p; b/=2; a=(a*a)%p; } return res; } inline void dfs(int x,int s){ if (x==m+1){ mp[s]++; return; } dfs(x+1,s); dfs(x+1,1ll*s*a[x]%p); } inline void dfs1(int x,int s){ if (x==n+1){ int a=c*pow(s)%p; ans=(ans+mp[a])%czx; return; } dfs1(x+1,s); dfs1(x+1,1ll*s*a[x]%p); } main(){ scanf("%lld%lld%lld",&n,&p,&c); if (c>=p){ puts("0"); return 0; } for (int i=1;i<=n;++i) scanf("%lld",&a[i]); m=n/2; dfs(1,1); dfs1(m+1,1); if (c==1) ans--; printf("%lld",ans); }
最后再给上几道中途相遇法的题目
标签:记录 click sans style onclick none long gcc pac
原文地址:http://www.cnblogs.com/logic-yzf/p/7576308.html