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

转载于:https://www.cnblogs.com/Vagrant-ac/p/11348787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值