PS:萌新刷题时的代码,基本没有改过,测试点都通过了。放上来总结一下思路与方法。
1.题目阐述
判断给定进制下反转数字是否为回文素数
2.题目思路
刚看蒙了一会,读不懂题意,什么radix进制的…其实就是数位的位置在相应的进制下颠倒,如123个位与百位颠倒为321,因此利用进制除余算法可以逐渐得到对应进制的可逆数(Reversible num)。至于素数判断就很常规啦,平方根以下的数字都除除,当然如果数字大的话也可以考虑筛法之类记录素数表,本题当然不会这么刁难。
3.题解代码
我的代码如下:
#include<cstdio>
#include<algorithm>
#include<math.h>
using namespace std;
bool isPrime(int num){
if (num <= 1) return false;
if (num == 2){
return true;
}
for (int i = 2; i <= int(sqrt(1.0*num)); i++){
if (num%i == 0) return false;
}
return true;
}
//数字颠倒
int tranverse(int num, int k){
int temp = 0;
while (num > 0){
temp = temp*k + num%k;
num /= k;
}
return temp;
}
void Test1015(){
int N, K;
while (true){
scanf("%d", &N);
if (N < 0) return;
scanf("%d", &K);
if (isPrime(N) && isPrime(tranverse(N, K))){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}
int main(){
Test1015();
getchar();
return 0;
}