题目链接:https://vjudge.net/problem/POJ-3641
题意:输入两个数p和a,如果p不为素数,且满足(a^p)%p==a,输出yes 否则输出no
直接用快速幂即可
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<vector>
#include<cstring>
#define LL long long
using namespace std;
#define N 1100000
LL p,a;
LL quickpow(LL n,LL k)
{
int ans=1;
while(k)
{
if(k&1)
ans=ans*n%p;
n=n*n%p;
k/=2;
}
return ans==a;
}
bool isPrime(LL n)
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
while(cin>>p>>a&&p&&a)
{
if(isPrime(p))
{
cout<<"no"<<endl;
continue;
}
if(quickpow(a,p))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}