1015 Reversible Primes (20 分)
题目大意
如果一个数本身是素数,而且在d进制下反转后的数在十进制下也是素数,就输出Yes,否则就输出No
基本思路
简单的进制转换、素数问题,直接看注释就好。其中关于进制转换的代码可以当作模板来使用。
代码
#include <bits/stdc++.h>
using namespace std;
//判断数字n是否是素数
bool check(int n){
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
int main(){
int temp,radix;
while(1){
cin>>temp;
//如果temp是负数,则结束循环
if(temp<0) break;
cin>>radix;
//将temp转换成相应的进制(比如6--110经过这个过程后就变成了011)
vector<int> v;
int temp1=temp;//存放临时的temp(这个temp后续还需要用来判断是不是素数,所以需要新创建一个变量temp1)
do{
v.push_back(temp1%radix);
temp1=temp1/radix;
}while(temp1!=0);
//将数组v中的结果再转换成十进制(将011再转换回十进制数sum)
int sum=0;
for(int i=0;i<v.size();i++){
sum=sum*radix+v[i];
}
//如果temp和sum都是素数,输出Yes,否则输出No
if(check(temp)&&check(sum)){
printf("Yes\n");
}else{
printf("No\n");
}
}
}