题解 | #素数伴侣#

素数伴侣

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static java.util.Arrays.*;
import static java.util.stream.Stream.*;


public class Main {
    public static void main(String[] args) throws IOException {

        testTh();
    }

    private static void testTh() throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;

        while ((str = bf.readLine()) != null) {
            str = bf.readLine();
            String[] s = str.split(" ");

            //odd 奇数
            //even 偶数
            ArrayList<Integer> number_odd = new ArrayList<>();
            ArrayList<Integer> number_even = new ArrayList<>();
            for (int i = 0; i < s.length; i++) {
                int parseInt = Integer.parseInt(s[i]);
                if (parseInt % 2 == 1) {
                    number_odd.add(parseInt);
                } else {
                    number_even.add(parseInt);
                }
            }
            int count = 0;
            int[] evenPair = new int[number_even.size()];
            for (int i = 0; i < number_odd.size(); i++) {
                boolean[] used = new boolean[number_even.size()];
                if (findPair(i, number_odd, number_even, evenPair, used)) {
                    count++;
                }
            }

            System.out.println(count);
        }


    }
    public  static Boolean findPair(Integer oddIndex, ArrayList<Integer> oddAL,
                                    ArrayList<Integer> evenAL, int[] evenPair, boolean[] used) {
        for (int i = 0; i < evenAL.size(); i++) {
            if (!used[i] && testPrime(oddAL.get(oddIndex) + evenAL.get(i))) {
                used[i] = true;
                if (evenPair[i] == 0 ||
                        findPair(evenPair[i] - 1, oddAL, evenAL, evenPair, used)) {
                    evenPair[i] = oddIndex + 1;
                    return true;
                }
            }
        }

        return false;
    }
    public static Boolean testPrime(Integer num) {
        if (num <= 3) {
            return num > 1;
        }
        if (num % 6 != 1 && num % 6 != 5) {
            return false;
        }

        double sqrt = Math.sqrt(num);
        for (int i = 5; i < sqrt; i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务