题目:
http://poj.org/problem?id=3641
思路:
判断素数,快速幂求幂。
CODE
#include <iostream>
#include <cstdio>
using namespace std;
bool isprime(long long p)
{
for(int i = 2; i * i <= p; ++i) {
if(p % i == 0) return false;
}
return true;
}
long long cal(long long p, long long a)
{
long long s = 1;
long long mod = p;
while(p > 0) {
if(p & 1) s = (s * a) % mod;
a = (a*a) % mod;
p >>= 1;
}
return s%mod;
}
int main()
{
long long p, a;
while(~scanf("%lld %lld", &p, &a)) {
if(p == 0 && a == 0) break;
if(isprime(p)) printf("no\n");
else if(cal(p, a) == a) printf("yes\n");
else printf("no\n");
}
return 0;
}