这道题意思是给定数N和进制R,把N转换成R进制数后再逆置一下得到N1,如果N和N1都是素数就输出yes,否则输出No。
思路:打一下表,转换一下机制判断一下就行了,应该没什么坑,写了一遍交了就过了。
代码:
//1015 进制转换 质数
int a[20],i,prime[100005];
void radix_change(int x,int radix){
//除r取余法转进制
i = 0;
while(x>=radix){
a[i++] = x%radix;
x /= radix;
}
a[i] = x;
}
int get_val(int r){
int num = 0;
for(int j=0;j<=i;j++){
num += a[j]*pow(r,i-j);
}
return num;
}
int get_prime(){
bool p;
for(int k=2;k<=100000;k++){
p = true;
for(int j=2;j*j<=k;j++){
if(k%j==0) p = false;
}
if(p) prime[k] = 1;
else prime[k] = 0;
}
}
bool judge(int x,int y){
if(prime[x]&&prime[y])
return true;
return false;
}
int main(){
int n,r;
//打表
get_prime();
while(scanf("%d",&n)!=EOF && (n>0)){
scanf("%d",&r);
radix_change(n,r);
int y = get_val(r);
if(judge(n,y)) printf("Yes\n");
else printf("No\n");
}
return 0;
}