题目链接:http://poj.org/problem?id=3641
题意:ap = a (mod p)
解题思路:快速幂运算
#include <iostream>
#include <math.h>
using namespace std;
long long mod_pow(long long x,long long n,long long mod)
{
if(n==0)
return 1;
long long res=mod_pow(x*x%mod,n/2,mod);
if(n&1)
res=res*x%mod;
return res;
}
bool isPrime(long long p)
{
if(p==2)
return true;
if(p%2==0||p==1)
return false;
bool flag=true;
for(int i=3;i<=sqrt(p);i=i+2)
{
if(p%i==0)
{
flag=false;
return flag;
}
}
return flag;
}
int main()
{
long long p,a,ans;
while(cin>>p>>a,p!=0||a!=0)
{
ans=mod_pow(a,p,p);
if(ans==a&&!isPrime(p))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}