前言
正文
参考题解
#include<iostream>
#include<cmath>
using namespace std;
/* 题意:给定一个正整数n和进制d,如果n为素数,并且n在d进制下反转后的数 在十进制下表示的数也是素数,则输出Yes,否则输出No 注意点: 素数的判断(注意是小于等于n的平方根)+ d进制转10进制+10进制转d进制 */
bool isPrime(int n){
if(n<=1)return false;
for(int i=2;i<=(int)sqrt(n*1.0);i++){//注意一定是小于等于,否则会错
if(n%i==0)return false;
}
return true;
}
int main(){
int n,d;
while(cin>>n){
if(n<0)break;
cin>>d;
if(!isPrime(n)){//n不是素数
cout<<"No"<<endl;
}else{
int a[110],len=0;
do{
a[len++]=n%d;
n/=d;
}while(n!=0);//注意此时是逆序的,比如10的2进制是1010;此时存储的是0101
//将d进制下的反转数再转换为10进制
for(int i=0;i<len;i++){
n=n*d+a[i];
}
if(isPrime(n))printf("Yes\n");
else printf("No\n");
}
}
return 0;
}