package com.patience.interview.huawei;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* 素数伴侣
* @author Green.Gee
* @date 2022/9/4 11:37
* @email green.gee.lu@gmail.com
*/
public class PrimeCouple {
public static void main(String[] args) throws IOException {
/**
* 奇数偶数 分组
* 循环奇数组 找到偶数组中能够奇数匹配的素数伴侣
* 已有伴侣的偶数则让给后来可以重新找到伴侣的
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
String [] lines = br.readLine().split("\\s");
List<Integer> odds = new ArrayList<>(8);
List<Integer> evens = new ArrayList<>(8);
for(String i : lines){
int item = Integer.valueOf(i);
if(item % 2 == 1){
odds.add(item);
}
if(item % 2 == 0){
evens.add(item);
}
}
int count = 0;
int [] matchEvens = new int[evens.size()];
for(int odd : odds){
boolean [] v = new boolean[evens.size()];
if(find(odd,matchEvens,evens,v)){
count++;
}
}
System.out.println(count);
}
static boolean find(int odd,int[] matchEvens,List<Integer> evens,boolean[] v){
for (int i = 0; i < evens.size(); i++){
boolean prime = isPrime(odd + evens.get(i));
if(prime && !v[i]){
v[i] = true;
// try again to understand
if(matchEvens[i] == 0 || find(matchEvens[i],matchEvens,evens,v)){
matchEvens[i] = odd;
return true;
}
}
}
return false;
}
private static boolean isPrime(int n) {
if(n == 1) return false;
for (int i = 2;i <= (int)Math.sqrt(n); i++){
if(n % i == 0)
return false;
}
return true;
}
}
素数伴侣 java
最新推荐文章于 2024-05-12 11:29:35 发布