题目大意:
一个在任何数字系统中可翻转的质数是一个质数,而且反转后的数在当下数字系统中还是质数
输入:
多行N和D以及用负数作为输入结束标志
N:数字 D:基数
输入:
对于一组N和D,输出yes(是可翻转质数)No(不是)
思路:
可以先打出质数表,然后判断每组N和反转后的N在基数D之下是不是全是质数
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 100005;
bool isprime[MAXN];
void getprita()//打表getprimetable
{
fill(isprime,isprime+MAXN,true);
isprime[0]=false;
isprime[1]=false;
isprime[2]=true;
for(int i=2;i<MAXN;i++)
{
if(isprime[i])
{
for(int j=i+i;j<MAXN;j+=i)
{
isprime[j]=false;
}
}
}
}
int main()
{
int n,d;
getprita();
while(scanf("%d",&n)&&n>=0)
{
scanf("%d",&d);
if(!isprime[n])//先看n是不是质数
{
printf("No\n");
continue;
}
int sum=0;
while(n)//得到在基数d下反转后的数字
{
sum=sum*d+n%d;
n/=d;
}
if(isprime[sum])//看反转后的数是不是质数
{
printf("Yes\n");
continue;
}
printf("No\n");
}
return 0;
}