题解 | #素数伴侣#
素数伴侣
http://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
function isPrime(num){
if(!num)return false
let loopMax = Math.sqrt(num);
if(Number(num)<=1)return false
if(num <= 3) return num >= 2
for(let i =2;i<=loopMax;i++){
if(num%i==0){
return false
}
}
return true
}
function getRes(arr1,arr2){
// arr1 是偶数集合 arr2奇数集合
let count = 0;
let evensMatch = new Array(arr2.length).fill(0)
for(let i = 0;i<arr1.length;i++){
let used = new Array(arr2.length).fill(0)
if(find(used, arr2, arr1[i], evensMatch)){
count++
}
}
console.log(count)
}
function find(used,evens,num,evensMatch){
for(let i = 0;i<evens.length;i++){
if(isPrime(num + evens[i]) && used[i] == 0){
// 偶数和奇数可以组成素数并且该奇数没有被使用
used[i] = 1;
// 标记为已使用
if(evensMatch[i] == 0 || find(used,evens,evensMatch[i],evensMatch)){
// 将匹配偶数保存至evensMatch
// 如果该偶数还可以与其他的奇数形成质数,则将新的偶数保存到evensMatch原来的舍弃
// 就是将现在的偶数 + 奇数形成的质数为最新的结果保存至evensMatch 、
evensMatch[i] = num;
return true
}
}
}
return false
}
let line
let arr = []
while(line = readline()){
arr.push(line);
if(arr.length == 2){
let numberArr = arr[1].split(' ').map(i=>parseInt(i));
let arr1 = numberArr.filter(i=>i % 2 == 0);
let arr2 = numberArr.filter(i=>i % 2 != 0);
let res = getRes(arr1,arr2)
arr = []
}
}