其他分享
首页 > 其他分享> > HDU-6608

HDU-6608

作者:互联网

题目:HDU-6608 题使用的数学思想:威尔逊定理+逆元+快速幂 威尔逊定理:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )。 逆元:x%mod/y%mod=x*pow(y,mod-2,mod); 题意:T组样例,给出一个P求出仅次于P的素数Q, 威尔逊定理: (P-1)! ≡ -1(mod P) 推广为:Q!*(Q+1)*......*(P-2)*(P-1) ≡ -1(mod P); Q!=-1(mod P)/(Q+1)*......*(P-2)*(P-1) 思路:使用暴力求出Q在使用威尔逊定理求出结果 注意:大数相乘会因为溢出出现问题。wa了N次祝你好运 AC-code: #include #include using namespace std; typedef long long ll; ll Prime(ll X) { ll i,x=sqrt((double)(X+0.5)); for(i=2;i<=x;i++) { if(X%i==0)return 0; } return 1; } ll mult(ll A,ll B,ll Mod) { return (A*B-(ll)((long double)A*B/Mod)*Mod+Mod)%Mod; } ll pow(ll x,ll y,ll mod) { ll res=1; while (y) { if(y%2)res=mult(res,x,mod); y=y/2;x=mult(x,x,mod); } return res%mod; } int main() { ll P,Q,i;int T; scanf("%d",&T); while(T--) { scanf("%lld",&P); //暴力求Q Q=P; while(--Q) { if(Prime(Q))break; } //求Q+1.....P-1 ll ret=1; for(i=Q+1;i

标签:HDU,ll,威尔逊,6608,定理,mod
来源: https://www.cnblogs.com/Vagrant-ac/p/11348787.html