题解 | #素数伴侣#
素数伴侣
https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i] = sc.nextInt();
}
ArrayList<Integer> evens = new ArrayList<>();
ArrayList<Integer> odds = new ArrayList<>();
for(int i=0;i<n;i++){
if((nums[i]&1)==1){
odds.add(nums[i]);
}else{
evens.add(nums[i]);
}
}
int[] evensMatch = new int[evens.size()];
int count = 0;
for(int i=0;i<odds.size();i++){
int[] used = new int[evens.size()];
if(find(used,evens,odds.get(i),evensMatch)){
count++;
}
}
System.out.println(count);
}
}
public static boolean isPrime(int num){
for(int i=2;i*i<=num;i++){
if(num%i==0){
return false;
}
}
return true;
}
public static boolean find(int[] used,ArrayList<Integer> evens,int num,int[] evensMatch){
for(int i=0;i<evens.size();i++){
if(isPrime(num+evens.get(i))&&used[i]==0){
used[i]=1;
//第二个条件相当于回溯,新的奇数要匹配这个偶数,但是这个偶数已经被旧的奇数占用了
//那么就让旧的奇数再去找一个新的匹配结果,used保证了不会重复冲突
if(evensMatch[i]==0||find(used,evens,evensMatch[i],evensMatch)){
evensMatch[i] = num;
return true;
}
}
}
return false;
}
}


