您的位置:首页 > Web前端

poj 3641 Fermat 与素数的判断

2013-09-26 20:25 246 查看
题意:给出p和a,判断p是否为非素数并且也满足a^p=a(mod p),如果是,输出yes,否则输出 no。

简单的素数判断!,与fermat定理的应用。

#include<iostream>
#include<cstdio>
#include<cstring>
typedef __int64 INT;
using namespace std ;

bool Isprime(int num)
{
if((num>2&&num%2==0)||num==1) return 0;
for(int i=3;i*i<=num;i+=2){
if(num%i==0) return 0;
}
return 1;
}

INT Format_Mod(INT a,INT k,INT m)
{
INT ans=1;
while(k){
if(k&1) ans=a*ans%m;
a=(a*a)%m;
k>>=1;
}
return ans;
}

int main()
{
INT a,p,res;
while(scanf("%I64d %I64d",&p,&a),(a||p)){
if(!Isprime(p)){
res=Format_Mod(a,p,p);
if(res==a) puts("yes");
else puts("no");
}
else puts("no");
}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论