前言

传送门

正文


参考题解

#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;
}