⬆︎
×

[PAT-A] 1156 Sexy Primes

Hyplus目录

Java

import java.util.Scanner;

public class Main {
    static boolean isPrime(int n) {
        if (n <= 1) return false;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }

    static int findNextSexyPrime(int n) {
        for (int m = n + 1; ; m++) {
            if (isPrime(m) && (isPrime(m - 6) || isPrime(m + 6))) {
                return m;
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        if (isPrime(n)) {
            if (isPrime(n - 6)) {
                System.out.println("Yes");
                System.out.println(n - 6);
            } else if (isPrime(n + 6)) {
                System.out.println("Yes");
                System.out.println(n + 6);
            } else {
                int nextSexyPrime = findNextSexyPrime(n);
                System.out.println("No");
                System.out.println(nextSexyPrime);
            }
        } else {
            int nextSexyPrime = findNextSexyPrime(n);
            System.out.println("No");
            System.out.println(nextSexyPrime);
        }
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

bool is_prime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= n / i; ++i)
        if (n % i == 0) return false;
    return true;
}

int main() {
    int n;
    scanf("%d", &n);

    if (is_prime(n) && is_prime(n - 6)) printf("Yes\n%d\n", n - 6);
    else if (is_prime(n) && is_prime(n + 6)) printf("Yes\n%d\n", n + 6);
    else {
        int m;
        for (m = n + 1;; m++)
            if (is_prime(m) && (is_prime(m - 6) || is_prime(m + 6)))
                break;
        printf("No\n%d\n", m);
    }

    return 0;
}

发表评论