#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
int n,d;
stack<int> s;
//freopen("1015-in.txt","r",stdin);
//freopen("1015-out.txt","w",stdout);
while(true)
{
scanf("%d",&n);
if(n<0)
break;
scanf("%d",&d);
bool flag=false;
for(int i=2;i<=sqrt(n*1.0);i++)
{
if(n%i==0)
{
flag=true;
break;
}
}
if(flag)
{
printf("No
");
continue;
}
int data=n;
while(true)
{
int mod = data%d;
s.push(mod);
data=data/d;
if(data==0)
break;
}
int exp=0;
int sum=0;
while(!s.empty())
{
int num=s.top();
sum+=num*pow(d*1.0,exp);
exp++;
s.pop();
}
//printf("%d
",sum);
for(int i=2;i<=sqrt(sum*1.0);i++)
{
if(sum%i==0)
{
flag=true;
break;
}
}
if(flag||sum<2)
{
printf("No
");
}
else
{
printf("Yes
");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
给定十进制n和d,n的d进制数反转之后转换十进制数m,判定n和m是否均为素数
一个special case
2 2
2转换成二进制后变成10,反转01,再变成十进制是1,显然不是素数了。不要理所当然就认为给的数就一定是素数。