代码
#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
//将一个十进制的数转化成指定进制的数
//将转化后的数颠倒
//将颠倒后的数转化回十进制的数
//判断是不是素数
string tentoany(int a,int radix);
long long anytoten(string a,int radix);
string rev_diy(string a);
bool is_prime(int a);
string tentoany(int a,int radix){//将整型的十进制的数,转化为任意进制的字符串型的数
int tmp=a;
string s;
s="";
while(tmp!=0){
s+=('0'+(tmp%radix));
tmp=tmp/radix;
}
s=rev_diy(s);
return s;
}
long long anytoten(string a,int radix){//任意进制的字符串形式的数,转成十进制的长整型
long long cnt=0;
for(int i=0;a[i]!=NULL;i++){
cnt+=((a[a.size()-i-1]-'0')*(pow(radix,i)));
}
return cnt;
}
string rev_diy(string a){//将一个字符串形式的数进行颠倒
string b;
b=a;
for(int i=0;a[i]!=NULL;i++){
b[i]=a[a.size()-i-1];
}
return b;
}
bool is_prime(int a){//这个函数用来判断是不是素数,返回1即是素数
if(a<2){
return 0;
}
else if(a==2){
return 1;
}
if(a%2==0&&a!=2){
return 0;
}
for(int i=3;i*i<=a;i+=2){
if(a%i==0){
return 0;
}
}
return 1;
}
int main()
{
int a,b;
while(true){
cin>>a;
if(a<0){
break;
}
else{
cin>>b;
if(is_prime(a)==false){
cout<<"No"<<endl;
}
else{
if(is_prime(anytoten(rev_diy(tentoany(a,b)),b))==true){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
}
}
return 0;
}