简述:考察点:素数判断+进制制
题目要求:就是给你输入数N,首先判断D是不是素数。如果是,然后N在D进制下进行翻转,然后返回成十进制,如果此时还是素数的话,那么就输出yes,否则输出no
主要考察了素数判断和进制转换。素数判断其实pat中普通的方式就够了,当然可以去进行优化,打表和欧拉筛素数。
进制转化是:使用辗转相除法,然后放到数组中就可以了。
注意你在选择素数的时候千万要添加等号。就是因为这个原因,我一直在找问题。呜呜呜
代码如下:
#include <iostream>
using namespace std;
const int N=111;
int d[N];
bool isprime(int n){
if(n<2) return false;
for(int i=2;i<=n/i;i++){
if(n%i==0) return false;
}
return true;
}
int main(){
int N,D;
//注意着算是黑盒测试,输入的时候需要去注意
while(cin>>N){
//在D进制下面是不是进制
cin>>D;
if(N<0) break;
if(isprime(N)){
//进制转化放到数位里面去
int idx=0;
do{
d[idx++]=N%D;
N/=D;
}while(N!=0);
//到过来相乘就可以了
//注意存在一个地方需要去注意
for(int i=0;i<idx;i++) N=N*D+d[i];
if(isprime(N)==true) cout<<"Yes"<<endl;
else puts("No");
}
else puts("No");
}
return 0;
}