伪素数测试:
根据费马定理可知,当n为素数时,a^(n-1)=1 mod n ,那么逆过来并不成立的,那有什么用。。。。。
哎!壮士请留步,逆过来的定理还是可以判定n是否为素数,虽然有错误的概率,但是,我们取两个素数作为a去测试,若n运算完都等于一,则极大的概率是素数,正确率高达99.9%,放心使用!!!
当然对于那两个素数来说得特判一下,要不然会有bug。
#include<cstdio>
long long qpow(int x,int n)
{
int mod=n+1;
long long d=1;
while(n>0)
{
if(n&1)
d=d*x%mod;
x=x*x%mod;
n>>=1;
}
return d%mod;
}
bool isprime(int n)
{
if(n==97||n==23)
return true;
if(qpow(97,n-1)==1&&qpow(23,n-1)==1)
return true;
return false;
}
int main(){
int n;
scanf("%d",&n);
if(isprime(n))
printf("Yes\n");
else printf("No\n");
return 0;
}