题目分析
判断一个数和它在某个进制下翻转后的数是否都为素数!
解题思路
(略)
AC程序(C++)
/**********************************
*@ID: 3stone
*@ACM: PAT.A015 Reversible Primes
*@Time: 18/8/27
*@IDE: DEV C++ 5.10
***********************************/
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
//10以内的进制转换
int reversal_N(int N, int D) {
int cur = N, remain;
int num = -1;
char str[100];
while(cur > 0) {
remain = cur % D;
cur /= D;
str[++num] = remain;
}
//本身就是倒序的,已经反转了
N = 0; //计算倒序后的数值
for(int i = 0; i <= num; i++){
N = N * D + str[i];
}
return N;
}
bool isPrime(int k) {
if(k == 1) return false; //需要单独排除1,否则会有一个测试点不过
//特殊情况,如输入2 2;则反转之后正好是 1
int sqt = (int)sqrt(1.0 * k);
for(int i = 2; i <= sqt; i++) {
if(k % i == 0)
return false;
}
return true;
}
int main() {
int N, D; //数,进制
while(scanf("%d", &N) != EOF){
if(N < 0) break;
scanf("%d", &D);
int rever = reversal_N(N, D);
if(isPrime(N) && isPrime(rever)) printf("Yes\n");
else printf("No\n");
}
return 0;
}