【POJ】[3641]Pseudoprime numbers
由题意知
伪素数满足:
①p不是素数
②存在 1 < a < p使得ap = a (mod p)
现在给出p和a
问当前a能否使p是伪素数
因为数字较大
所以判断素数可直接判断
幂可使用快速幂取模
#include<stdio.h>
bool prime(int m) {
for(int i=2; i*i<=m; i++)
if(m%i==0)
return false;
return true;
}
int pow(int a,int b) {
int MOD=b;
__int64 r=1,t=a%MOD;
while(b) {
if(b&1)
r=r*t%MOD;
t=t*t%MOD;
b>>=1;
}
return (int)r;
}
bool judge(int n,int m) {
if(prime(n))
return false;
if(pow(m,n)==m%n)
return true;
return false;
}
int main() {
int p,a;
while(scanf("%d %d",&p,&a),p||a) {
if(judge(p,a))
printf("yes\n");
else
printf("no\n");
}
return 0;
}