HDU-6608
Posted vagrant-ac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-6608的主要内容,如果未能解决你的问题,请参考以下文章
[hdu-6608] Fansblog 威尔逊定理 质数的密度分布 2019 多校 3
hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测