学习快速幂之后做的第一道题,这里记录一下。
题目大意:给出两个数 a 和 p,如果 p 是一个素数,判断是否满足公式 a^p %p=a,如果满足,则输出yes,否则,输出no。附链接:http://poj.org/problem?id=3641。
大体思路:题目简单,判断素数,然后判断是否满足公式。
以下是ac代码:
#include<iostream>
using namespace std;
long long power(long long a,long long b,long long mod){
long long ans=1;
long long temp=a;
while(b!=0){
if(b%2)
ans=ans*temp%mod;
temp=temp*temp%mod;
b/=2;
}
return ans;
}
bool is_prime(long long a){
if(a<=1)
return false;
for(long long i=2;i*i<=a;i++)
if(a%i==0)
return false;
return true;
}
int main(){
long long p,a;
while(cin>>p>>a){
if(p==0)
break;
if(is_prime(p)){
cout<<"no"<<endl;
continue;
}
if(power(a,p,p)==a)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}