Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
int n = scanner.nextInt();
if (n < 0) break;
int m = scanner.nextInt();
if (!isPrime(n)) {
System.out.println("No");
} else {
String str = Integer.toString(n, m); // 10 -> r
int value = translate(str, m);
if (isPrime(value)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
}
public static int translate(String n, int r) {
int sum = 0;
for (int i = n.length() - 1; i >= 0; i--) {
sum = sum * r + (n.charAt(i) - '0');
}
return sum;
}
public static boolean isPrime(int number) {
if (number < 2) {
return false;
}
for (int i = 2; i <= number / i; i++) {
if (number % i == 0) return false;
}
return true;
}
}
C++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
bool is_prime(int n) {
if (n == 1) return false;
for (int i = 2; i * i <= n; i++)
if (n % i == 0) return false;
return true;
}
bool check(int n, int d) {
if (!is_prime(n)) return false;
LL r = 0;
while (n) {
r = r * d + n % d;
n /= d;
}
return is_prime(r);
}
int main() {
int n, d;
while (cin >> n >> d, n >= 1) {
if (check(n, d)) puts("Yes");
else puts("No");
}
return 0;
}