素数伴侣

2023-05-16

题目:

在这里插入图片描述

解析:

本题目采用了匈牙利算法,起初以为只是找到所有的素数伴侣,但是题目有一个条件,那就是每个数字只能使用一次,组成拥有最多的素数伴侣

代码产出:

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 fn = (arr) => {
//     let result = 0
//     const totals = []
//     for(let i = 0;i < arr.length;i++) {
//         result = 0
//         for(let j = i+1;j < arr.length;j++) {
//             // 确保是一个基数和一个偶数
//             if(Number(arr[i]) % 2 === 0 && Number(arr[j]) % 2 !== 0 || Number(arr[j]) % 2 === 0 && Number(arr[i]) % 2 !== 0) {
//                 if(isPrem(Number(arr[i]) + Number(arr[j]))) { // 如果找到第一组素数伴侣
//                     let temp = JSON.parse(JSON.stringify(arr))
//                     temp.splice(i, 1)
//                     temp.splice(j, 1)
//                     result  = 1 + fn(temp)
//                 }
//             }
            
//         }
//         totals.push(result)
//     }
//     return Math.max(...totals)
// }
// 判断一个数是否为素数
var isPrem = num => {
    // 从2-根号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
            //如果第i个偶数没有伴侣
            //或者第i个偶数原来有伴侣,并且该伴侣能够重新找到伴侣的话(这里有递归调用)
            //则奇数x可以设置为第i个偶数的伴侣
            //这里采用了匈牙利算法,能让则让
            if(!evensMatch[i] || find(evensMatch[i], evens, used, evensMatch)) {
                evensMatch[i] = x;
                return true;
            }
        }
    }
    //遍历完偶数都没有可以与传入奇数做伴侣的,该奇数只能孤独终老了
    return false
}

欢迎交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

素数伴侣 的相关文章

随机推荐

  • vue:移动端使用ckplayer

    h5 播放倍速 xff1a playbackrate 0 这个属性可以关闭 全屏的思路 xff1a 点击界面的一张图片封面 xff0c 显示已经占满整个页面的视频 关闭的功能 支持html5的 音量调节 在移动端是否显示音量调节按钮 倍速播
  • vue报错: npm run serve报错 ‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

    原因 xff1a 该目录下node modules gt bin gt 没有vue cli service文件 这个时候运行npm run serve 或 npm run dev就会报错 加我weixin xff0c 可帮忙解决 做法一 x
  • 公众号开发:微信调试 微信不允许iframe引入授权页面

    本想实现公众号 xff0c 点击进入另一个页面 这样引入的授权页面 xff0c 在没有授权情况下 此处引入的页面采用了静默授权 打开为空白页 span class token tag span class token tag span cl
  • 后端: linux后台运行 nohup: ignoring input and appending output to ‘nohup.out’

    Unix Linux下一般比如想让某个程序在后台运行 xff0c 很多都是使用 amp 在程序结尾来让程序自动运行 但是如果终端关闭 xff0c 那么程序也会被关闭 但是为了能够后台运行 xff0c 那么我们就可以使用nohup这个命令 n
  • css: css3动画(淡入淡出)

    64 keyframes 规则用于创建动画 xff0c 并且必须 把它捆绑到某个选择器 xff0c 否则不会产生动画效果 您必须定义动画的名称和时长 如果忽略时长 xff0c 则动画不会允许 xff0c 因为默认值是 0 xff08 动画的
  • 小程序:插件未授权使用

    问题1 登录用户不是该小程序的开发者 替换 project config json 文件下的appid 问题2 插件未授权使用 由于我个人是个体工商户 xff0c 添加不了 社交 gt 直播 类型 xff0c 所以开发者工具登录我的微信没法
  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • flutter报错: Gradle threw an error while downloading artifacts from the network. Retrying

    项目之前是可以正常运行的 xff0c 突然就报这个错误了 Gradle threw an error span class token keyword while span downloading artifacts span class
  • webpack:1 概念

    loader的作用 xff1a 是用来处理不同类型的文件 xff0c 操作的是文件 plugin的作用 xff1a 是一个扩展器 xff0c 不操作文件 xff0c 用来增强功能 其它webpack的使用看webpack原汁原味的 官网 高
  • 数据库: mongodb导入json数据

    登录聚合数据 xff0c 找些免费的api请求后下载成json文件 xff0c 去掉多余的格式只保留数组格式 xff0c 选择json文件即可导入成功 可以看资源 xff1a 新闻头条新闻头条新闻头条 carc1subject1 json
  • webpack: 4 loader汇总(style-loader等)

    所有的loader必须匹配规则 xff0c 否则不生效 配置文件中 xff0c module中rules的use执行顺序是从后往前执行 url loader 用于将文件转换为base64 URI的webpack加载程序 options li
  • webpack: 5 报错,错误

    webpack 报错 xff1a Uncaught ReferenceError is not defined webpack webpack打包jquery的插件 xff08 EasyLazyLoad xff09 时 xff0c 报错 方
  • Vue:无限滚动-通过vant组件

    一 xff1a 下拉刷新上拉加载功能 1 实现原理 xff1a 通过vant的List和PullRefresh两个组件实现 xff08 PullRefresh组件标签包裹List组件标签 xff09 2 我遇到的问题 Load方法触发的次数
  • webpack:打包示例-打包多入口

    入口 entry 前台 index 39 public assets js index 39 打包入口项 list 39 public assets js list 39 search 39 public assets js search
  • kubernetes基础——一文读懂k8s

    容器 容器与虚拟机对比图 左边为容器 右边为虚拟机 容器技术是虚拟化技术的一种 xff0c 以Docker为例 xff0c Docker利用Linux的LXC LinuX Containers 技术 CGroup Controll Grou
  • curl错误28:Resolving timed out after 15009 milliseconds解决方案

    报错信息如字面意思就是连接超时了 xff0c 解决方案如下 xff1a 1 检查Curl的超时参数 xff0c 如果设置小于1s的超时时间 xff0c curl会直接返回超时错误 xff08 28 xff09 xff0c 并不会发起任何的请
  • Linux 可视化桌面远程连接

    Linux xff08 一 xff09 防止系统文件修改导致DNS清空 chattr 43 i etc resolv conf xff08 二 xff09 安装vnc yum install y tigervnc tigervnc serv
  • C-Free5注册码,秘钥,解决办法

    C Free5注册码 xff0c 秘钥 xff0c 解决办法 用户名 xff1a 123123 电子邮件 xff1a 111 64 qq com 注册码 xff1a mJ2Em9jdm7jGwYTpmp2H6KmehtvO 显示让重启电脑
  • Ubuntu16.04将python命令指向python3

    第一步 xff1a 将原来的python文件进行备份 sudo cp usr bin python usr bin python bak 第二步 xff1a 删除原来指向python2的文件 sudo rm usr bin python 第
  • 素数伴侣

    题目 xff1a 解析 xff1a 本题目采用了匈牙利算法 xff0c 起初以为只是找到所有的素数伴侣 xff0c 但是题目有一个条件 xff0c 那就是每个数字只能使用一次 xff0c 组成拥有最多的素数伴侣 代码产出 xff1a spa