题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805495863296000
题目大意:判断一个数是不是“可翻转的素数”。首先,该数本身是素数,其次,在d进制下他的翻转数也是素数。给出的数n是十进制。
思路:例如,23 2 :先判断23是不是素数,然后将23转换为2进制为10111,翻转为11101,再变为十进制为29 ,判断29是否为素数,两个判断都是是则输出Yes。(为什么我觉得题目表达的一点儿也不清楚?)
#include<bits/stdc++.h>
using namespace std;
int n,d;
int _reverse(int tmp){ //将n变为d进制表示 然后翻转 最后返回其十进制
int ret=0;
while(tmp){
ret=ret*d+tmp%d;
tmp=tmp/d;
}
return ret;
}
int isprime(int m){
int f=1;
if(m==1) f=0; //测试点2
for(int i=2;i<=sqrt(m)+0.5;i++){
if(m%i==0) {
f=0;break;
}
}
if(!f) return 0;
else return 1;
}
int main()
{
while(scanf("%d%d",&n,&d)){
if(n<=0) break;
if(isprime(n)&&isprime(_reverse(n))){
printf("Yes\n");
}
else printf("No\n");
}
}