PO3641 Pseudoprime numbers判伪素数与快速幂

来源:互联网 发布:python 开发环境 编辑:程序博客网 时间:2024/06/05 16:53
#include<stdio.h>#include<string.h>#define maxn 100001int prime[maxn],save[maxn],tot;bool pan(int a,int p){if(p<maxn)//直接判素{if(!prime[p])return false;}else{int ok=1;for(int i=1;save[i]*save[i]<=p;i++)//利用素数表判素if(p%save[i]==0){ok=0;break;}if(ok)return false;}int s=1;int mod=p,b=a;while(p)//快速幂{if(p&1){s=(long long)s*(long long)a%(long long)mod;}a=(long long)a*(long long)a%(long long)mod;p>>=1;}if(s%mod==b)return true;else return false;}void init()//建立素数表{tot=1;for(int i=2;i<maxn;i++)if(!prime[i]){save[tot++]=i;for(int j=i+i;j<maxn;j+=i)prime[j]=1;}}int main(){int p,a;init();while(~scanf("%d%d",&p,&a)&&p){if(pan(a,p))printf("yes\n");elseprintf("no\n");}return 0;}

0 0