题目大意:
数字N在D进制下是不是双重素数。双重素数是本身和倒数皆为素数的数。
实现:判断N是否为素数。如果不是,输出No,否则将该数在D进制下倒过来再化为十进制数,判断是否为素数。如果是,输出Yes,否则输出No.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,r;
int main()
{
while(scanf("%d",&n),n>=0)
{
scanf("%d",&r);
if(n==0||n==1)
{
printf("No\n");
continue;
}
bool flag=true;
int k=sqrt(n);
for(int i=2;i<=k;i++)
if(n%i==0)
{
flag=false;
break;
}
if(!flag)
{
printf("No\n");
continue;
}
int num=0;
while(n)
{
num=num*r+n%r;
n/=r;
}
if(num==0||num==1)
{
printf("No\n");
continue;
}
k=sqrt(num);
for(int i=2;i<=k;i++)
if(num%i==0)
{
flag=false;
break;
}
if(!flag)printf("No\n");
else printf("Yes\n");
}
return 0;
}