PAT1015 Reversible Primes(可翻转的素数)
本题输出Yes需满足的条件为:n为素数,把n转变为d进制后反转再转为十进制后也为素数。
相信在完全理解题目意思后,大家都可以顺利做出本题。
#include<iostream>
#include<math.h>
#define N 100001
using namespace std;
int n,d,a[N]={0};
//使用欧拉筛获得素数数组
void init(){
a[1]=1;
for(int i=2;i<=N/2;i++)
for(int j=i*2;j<=N;j+=i)
a[j]=1;
}
//核心代码,将正整数x先转为反转过的d进制字符串,再转为十进制
int fun(int x){
string s="";
while(x!=0){
s+=x%d+'0';
x=x/d;
}
//根据十进制转n进制规则可知,s已经是反转过的d进制字符串,无需再次反转
int t=0;
for(int i=0;i<s.length();i++)
t=t*d+s[i]-'0';
return t;
}
int main() {
init();
while(1){
cin>>n;
if(n<0)
break;
cin>>d;
if(a[n]==0&&a[fun(n)]==0)
cout<<"Yes\n";
else
cout<<"No\n";
}
return 0;
}