题目:
解析:
本题目采用了匈牙利算法,起初以为只是找到所有的素数伴侣,但是题目有一个条件,那就是每个数字只能使用一次,组成拥有最多的素数伴侣
代码产出:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var count = 0
rl.on('line', function (line) {
if(!count)
{
count = Number(line)
} else {
console.log(fn(line.split(' ')))
count = 0
}
});
var fn = (arr) => {
const odds = []
const evens = []
for(let i in arr) {
if(arr[i] % 2 === 0) {
evens.push(arr[i])
} else {
odds.push(arr[i])
}
}
const evensMatch = []
let result = 0
for(let i in odds) {
const used = []
if (find(Number(odds[i]), evens, used, evensMatch)) result ++
}
return result
}
var isPrem = num => {
const max = Math.sqrt(num)
for(let i = 2; i<=max;i++) {
if(num % i === 0) return false
}
return true
}
var find = (x, evens, used, evensMatch) => {
for(let i in evens) {
if(isPrem(x + Number(evens[i])) && !used[i]) {
used[i] = 1
if(!evensMatch[i] || find(evensMatch[i], evens, used, evensMatch)) {
evensMatch[i] = x;
return true;
}
}
}
return false
}
欢迎交流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)