题目链接
此题有两个坑:
第一,要理解题意,判断逆序是否为素数,是将n先转化为radix的进制,再将这个radix进制数反转,再转换为十进制看是否为素数。
第二,要控制结束条件,需用到while…EOF,仅仅靠n为负数作为结束条件会超时,因为radix在输入结束之后始终无法赋值。
#include<cstdio>
#include<math.h>
bool is_prime(int n){//判断n是否为素数
if(n<=1) return false;
else{
int sqr=(int)sqrt(n);
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
}
return true;
}
}
int d[111];
int main(){
int n,radix,i;
while(scanf("%d",&n)!=EOF){
if(n<0) break;//当n为负数时,直接结束
scanf("%d",&radix);
if(!is_prime(n)){//原数就不是素数
printf("No\n");
continue;
}
else{//原数是素数,需判断n在radix进制转换下的逆序是否为素数
for(i=0;n;i++){//除留余数法进制转化
d[i]=n%radix;
n/=radix;
}
for(int j=0;j<i;j++){//逆序转化为十进制数
n*=radix;
n+=d[j];
}
if(is_prime(n)){//逆序是素数
printf("Yes\n");
}
else printf("No\n");
}
}
return 0;
}