您的位置:首页 > 运维架构

【POJ】[3641]Pseudoprime numbers

2016-07-25 17:36 316 查看


由题意知

伪素数满足:

①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;
}


题目地址:【POJ】[3641]Pseudoprime numbers
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj