链接:http://www.patest.cn/contests/pat-a-practise/1015
输入 :N D N (< 105) and D (1 < D <= 10)
输出 :Yes/No
如果N是素数并且N在D进制下反转后 仍然是素数,则输出Yes,否则No
【分析】先构造105以内的素数表,然后求反转,判断并输出结果
构造素数表参考博客 http://blog.csdn.net/anqier0468/article/details/9986721
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
bool prime[100010];
void init()
{
memset(prime,true,sizeof(prime));
prime[0]=false;
prime[1]=false;
for(int i=2;i*i<100000;i++)
{
for(int j=2;j*i<100000;j++)
{
prime[j*i]=false;
}
}
}
int reverse_(int num,int d)
{
int r[100000];
int cnt=0;
while(num)
{
r[cnt++]=num%d;
num/=d;
}
int a=0;
for(int i=0;i<cnt;i++)
{
a=a*d+r[i];
}
return a;
}
int main()
{
// freopen("in.txt","r",stdin);
init();
int num,d;
while(cin>>num&&num>=0)
{
cin>>d;
int ans= reverse_(num,d);
if(prime[ans] && prime[num])
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}