输入m,n;
首先 若m为素数直接输出no;
若为素数,则判断n的m次方mod m=n mod m?;
若相等输出yes;
否则输出no
用取余+快速幂;
素数判断就不用说了
记得 long long
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
long long pd(long long x){
long long a=floor(sqrt(x));
for(long long i=2;i<=a;i++)
if(x%i==0)return 0;
return 1;
}
long long f(long long m,long long n){
long long m1=m,n1=n;
long long s=1;
while(m){
if(m%2)s*=n;
n*=n;
m/=2;
s%=m1;
n%=m1;
}
if(s%m1==n1%m1)
return 1;
else return 0;
}
int main(){
long long i,j,k,m,n;
while(scanf("%lld%lld",&m,&n)){
if(m==0&&n==0)break;
if(pd(m))printf("no\n");
else if(f(m,n))printf("yes\n");
else printf("no\n");
}
return 0;
}