思路:进制转换和质数判断
#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX 2005
int isprime(int n) {
if (n == 0 || n == 1)
return 0;
for (int i = 2; i*i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int D, N,n, i, j,cnt;
int a[MAX];
while (scanf("%d", &N)) {
if (N < 0) {
break;
}
scanf("%d", &D);
n = N;
cnt = 0;
while (N) {
a[cnt++] = N%D;
N /= D;
}
int ans = 0;
for (i = cnt - 1; i >= 0; i--) {
int temp = 1;
for (j = 0; j<cnt - 1 - i; j++) {
temp = temp*D;
}
ans = ans + a[i] * temp;
}
if (isprime(n)&&isprime(ans)) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}