目录
原题
思路
73在10进制下的反转数是37,两个都是素数。23的二进制是10111,反转之后是11101,也就是39,两个都是质数。23在十进制下的反转数是32,32不是质数。每读入一个数字,先对其判断是否是质数,然后求出其反转数,判断它是不是质数。
注意
1不是质数。
代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
bool isprime(int key);
int reverse(int key, int radix);
int main(void) {
int temp, radix;
while (true) {
scanf("%d", &temp);
if (temp < 0) {
break;
}
scanf("%d", &radix);
if (!isprime(temp)) {
puts("No");
continue;
}
temp = reverse(temp, radix);
if (isprime(temp)) {
puts("Yes");
}
else {
puts("No");
}
}
return 0;
}
bool isprime(int key) {
if (key <= 1) {
return false;
}
int upper = (int)sqrt(1.0 * key);
for (int i = 2; i < upper + 1; i++) {
if (key % i == 0) {
return false;
}
}
return true;
}
int reverse(int key, int radix) {
int rever = 0;
while (key) {
rever = rever * radix + key % radix;
key /= radix;
}
return rever;
}