题目: PAT A 1015
题目大意
输入十进制的N
和一个基数d
。问把N
转换为d
进制以后,reverse
数位得到的数,在重新转换为10机制,问新的数以及原来的数,是否都是素数
解题思路
- 素数筛
- 进制的转换
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
bool isPrime[maxn];
void init(){
for(int i=0;i<maxn;++i) isPrime[i]=1;
isPrime[0]=isPrime[1]=0;
for(int i=2;i<maxn;++i){
if(!isPrime[i]) continue;
for(int j=i*i;0<j && j<maxn;j+=i){
isPrime[j]=false;
}
}
}
int toTenRadix(int n,int radix){
//n在radix进制下进行翻转,n首先是10进制
vector<int>digit;
while(n){
digit.push_back(n%radix);
n/=radix;
}
int sum=0;
for(int v:digit){
sum=sum*radix+v;
}
return sum;
}
int main(){
init();
int n,d;
while(~scanf("%d",&n)){
if(n<0) break;
scanf("%d",&d);
int ans=toTenRadix(n,d);
if(isPrime[ans] && isPrime[n]) printf("Yes\n");
else printf("No\n");
}
system("pause");
return 0;
}