题解 | #素数伴侣#

素数伴侣

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 = []
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
虚闻松声:很顶的简历,不改也没啥问题。 两点建议 1. 细化项目经历。关于【负责内容】可以稍微再具体一些,重点项目可以写两三个大的模块,以列表形式展开。同时适当提一下项目最终的效果。 2. 适当精炼表达。课程写一行足矣;荣誉奖项,写成一两行吧;CET-6再加一句话就行了,4 没必要写 CV、求职等咨询,欢迎私信交流。
投递中科院自动化所等公司9个岗位 > 听劝,这个简历怎么改
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务