⬆︎
×

[PAT-A] 1015 Reversible Primes

Hyplus目录

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;
}

发表评论