某个数是某个系统d的reversible primes需要满足,这个数本身是素数,且这个数转换成d进制后倒转过来再转化成10进制后的数仍然是素数。
题意难懂但懂了就好做。
下面的代码的巧妙之处在于reverse_with_radix取得的余数的顺序就刚好是换成d进制后倒转得到的顺序。
需要注意的点:0和1不是素数。
#include<cstdio>
bool isprime(int a) {
if (a <= 1) return false;
for (int i = 2; i * i <= a; i++) {
if (a % i == 0) return false;
}
return true;
}
int reverse_with_radix(int a, int r) {
int total = 0, t;
while (a != 0) {
t = a % r;
total = total * r + t;
a = a / r;
}
return total;
}
int main() {
int n, d;
while (scanf("%d", &n)) {
if (n < 0) return 0;
scanf("%d", &d);
if (isprime(n) && isprime(reverse_with_radix(n, d))) printf("Yes\n");
else printf("No\n");
}
}