题目链接在此。
题意
给出正整数N进制Radix,若N是素数,且N在Radix进制下反转后的数在十进制下也是素数,则输出Yes,否则输出No。
思路
这个题主要的知识点是进制转换以及素数的判断。
1. 判断N是不是素数,如果不是输出No;如果是到第二步
2. 将N转换成Radix进制,保存在数组中,然后采用“逆序遍历”的方式重新转换成十进制(逆序遍历数组等价于将数组逆转)。如果转换后是素数,则输出Yes,否则输出No。
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,radix;
int temp[999], num;
//判断n是不是素数,是返回true
bool isPrime(int n){
if(n<=1) return false; //不能漏掉这一句
for(int i = 2; i <= (int)sqrt(n); i++){
if(n%i == 0) return false;
}
return true;
}
int main(){
while(scanf("%d",&n),n>=0){
scanf("%d",&radix);
if(isPrime(n) == false){ //如果n不是素数
printf("No\n"); //输出No
} else{ //如果n是素数
num = 0;
//将n转换成radix进制的数,放到temp[]数组中
do{
temp[num++] = n%radix;
n /= radix;
}while(n != 0);
//将数组temp转换成十进制数
int res = 0;
for(int i = 0; i < num; i++){
res = res*radix + temp[i];
}
if(isPrime(res)){
printf("Yes\n");
}else{
printf("No\n");
}
}
}
return 0;
}