PAT 甲级测试题目 -- 1015 Reversible Primes
题目描述
反转素数指的是某个数是素数,且它在某进制的情况下反转过来的数字也是素数。例如:73 在 10 进制的情况下反转过来是 37,两个数都是素数,因此 73 是反转素数。
输入:
若一行输入给你两个正整数 N 和 M,N 小于 105,1 < M <= 10。
若一行输入为负数时停止输入。
输出:
根据输入的数据判断它不是反转素数。
若是,则输出 Yes
若不是,则输出 No
分析
进制转换 + 素数判断(注意 1 不是素数),该题为水题
实现
#include <iostream>
#include <math.h>
using namespace std;
int ReverseNum(int number, int redix) {
string str;
do {
int temp = number % redix;
str += temp + '0';
number /= redix;
} while (number != 0);
int reverseNum = 0;
for (int i = 0; i < str.size(); ++i) {
char t = str[i];
reverseNum = reverseNum*redix + t - '0';
}
return reverseNum;
}
bool isPrime(int number) {
if (number <= 1)
return false;
for (int i = 2; i <= sqrt(number); ++i) {
if(number % i == 0)
return false;
}
return true;
}
int main() {
int number, redix;
while (true) {
cin >> number;
if (number < 0)
break;
cin >> redix;
if(isPrime(number) && isPrime(ReverseNum(number, redix))){
cout << "Yes" << endl;
} else
cout << "No" << endl;
}
return 0;
}
希望能帮到大家