码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-6608

时间:2019-08-13 22:45:09      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:using   你好   素数   math   print   a*   数学   type   double   

题目: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;iHDU-6608

标签:using   你好   素数   math   print   a*   数学   type   double   

原文地址:https://www.cnblogs.com/Vagrant-ac/p/11348787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!