题解 | #素数伴侣#

素数伴侣

https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }
        List<Integer> odds = new ArrayList<>();
        List<Integer> evens = new ArrayList<>();
        for (int num : nums) {
            if (num % 2 == 0) {
                evens.add(num);
            } else {
                odds.add(num);
            }
        }
        int[] match = new int[evens.size()];
        Arrays.fill(match, -1);
        int count = 0;
        for (int i = 0; i < odds.size(); i++) {
            boolean[] used = new boolean[evens.size()];
            if (find(odds.get(i), evens, used, match)) {
                count++;
            }
        }
        System.out.println(count);
    }

    private static boolean find(int x, List<Integer> evens, boolean[] used,
                                int[] match) {
        for (int i = 0; i < evens.size(); i++) {
            if (isPrime(x + evens.get(i)) && !used[i]) {
                used[i] = true;
                if (match[i] == -1 || find(match[i], evens, used, match)) {
                    match[i] = x;
                    return true;
                }
            }
        }
        return false;
    }

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务