题目要求在给定的进制 D
下,判断一个数 N
是否是一个可逆素数。所谓可逆素数是指:在该进制下,数 N
是一个素数,并且将 N
反转后得到的新数在相同进制下也是一个素数。
在这里注意是d进制的反转,刚开始理解成了仅仅将数字反转
#include <bits/stdc++.h>
using namespace std;
// 判断一个数是否为素数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// 将一个数 n 在进制 d 下反转
int reverseNumber(int n, int d) {
int reversed = 0;
while (n > 0) {
reversed = reversed * d + n % d;
n /= d;
}
return reversed;
}
int main() {
int n, d;
while (cin >> n && n >= 0) { // 读取直到 n 为负数
cin >> d;
if (!isPrime(n)) {
cout << "No" << endl;
continue;
}
int reversed = reverseNumber(n, d);
if (isPrime(reversed)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}