1015 Reversible Primes (20 分)
题目大意:
给出一个正整数N和D
如果N是素数 且 N的D进制 逆序 再转回十进制 也是素数
那么就输出Yes 否则No
分析:
筛法求素数
然后要注意1不是素数
AC代码:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
bool P[100005];
int N,D;
int Temp[100005];
void Judge(){
memset(P,false,sizeof(P));
for(int i=2;i<sqrt(100000);i++){
if(!P[i]){
for(int j=i*i;j<=100000;j+=i)
P[j]=true;
}
}
P[1]=true;
}
int Rever(){
int t=0,tmp=N,sum=0;
while(tmp){
Temp[t++]=tmp%D;
tmp/=D;
}
for(int i=t-1;i>=0;i--){
sum += Temp[i]*pow(D,t-i-1);
}
return sum;
}
int main(){
Judge();
while(cin>>N){
if(N<0)
break;
cin>>D;
if(!P[N]){
int sum=Rever();
if(!P[sum])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else
cout<<"No"<<endl;
}
return 0;
}