Tips:
- 这题开始一直没太弄懂题目,以为给出的数是以d为底,相当于d进制(但各位可能比d大),然后转换成10进制,再倒置.结果只能过一个点.而且如果按照我的思路,第二个case应该是No才对.
- 最后只能搜搜其它人的答案了.原来是这样做的:先把给出的十进制数转换成d进制,然后这个d进制再逆置,再转换成十进制,再判断.
最后借鉴了某位浙大大神的blog,其中的转置处理写的很nice.
#include <stdio.h>
int isPrime(int n){
int i;
if(n < 2)
return 0;
for(i = 2;i * i <= n;i ++){
if(n % i == 0)
return 0;
}
return 1;
}
int numReserve(int n,int d){
int sum = 0;
while(n > 0){
sum = sum * d + n % d;
n /= d;
}
return sum;
}
int main(){
int n,d;
while(scanf("%d",&n)){
if(n < 0)
break;
scanf("%d",&d);
if(isPrime(n) && isPrime(numReserve(n,d)))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}