【华为OJ】【074-素数伴侣】

本文介绍了一款用于从给定偶数个正整数中筛选出形成'素数伴侣'的最佳组合的程序。每对正整数之和为素数则称其为'素数伴侣'。程序通过动态规划解决此问题,旨在找到组成'素数伴侣'最多的方案。输入包括待挑选的正整数数量和具体数值,输出则是这些'素数伴侣'的最大对数。

【华为OJ】【算法总篇章】


【华为OJ】【074-素数伴侣】

【工程下载】


题目描述

    若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。
现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多
种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13
编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。

输入:
    有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
输出:
    输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。

输入描述

输入说明
1 输入一个正偶数n
2 输入n个整数

输出描述

求得的“最佳方案”组成“素数伴侣”的对数。

输入例子

4
2 5 6 13

输出例子

2

算法实现

import java.util.Arrays;
import java.util.Scanner;

/**
 * Author: 王俊超
 * Date: 2016-01-06 10:43
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = scanner.nextInt();
            }

            System.out.println(countPrimePairs(arr));
        }

        scanner.close();
    }


    private static boolean isPrime(int n) {
        if (n < 2) {
            return false;
        }

        int sqrt = (int) Math.sqrt(n);
        for (int i = 2; i <= sqrt; i++) {
            if (n % i == 0) {
                return false;
            }
        }

        return true;
    }

    /**
     * 从后向前看
     * 利用动态规划解题,dp[i]表示(n-1)~i最多有的伴侣数;
     * 当v[i]+v[j]为素数。dp[i]+dp[j+1] = dp[i+1]+dp[j+1]+1;
     * 由于伴侣数成对出现,必然只能在i-1和j-1的基础上出现一对。
     * 当v[i]+v[j]不为素数。dp[i]=dp[i+1]
     *
     * @param v
     * @return
     */
    private static int countPrimePairs(int[] v) {

        int[] dp = new int[v.length + 1];

        for (int i = v.length - 2; i > -1; i--) {
            for (int j = v.length - 1; j > i; j--) {
                int cnt = isPrime(v[i] + v[j]) ? (dp[i + 1] - dp[j - 1] + dp[j + 1] + 1) : dp[i + 1];
                dp[i] = (cnt > dp[i]) ? cnt : dp[i];
            }
        }

//        System.out.println(Arrays.toString(v));
//        System.out.println(Arrays.toString(dp));

        return dp[0];
    }
}
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像3.内容:标题所示,对于介绍可点击主页搜索博客4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心技术同步精进,matlab项目合作可si信%% 开发者:Matlab科研助手%% 更多咨询关注天天Matlab微信公众号### 团队长期从事下列领域算法的研究改进:### 1 智能优化算法及应用**1.1 改进智能优化算法方面(单目标多目标)****1.2 生产调度方面**1.2.1 装配线调度研究1.2.2 车间调度研究1.2.3 生产线平衡研究1.2.4 水库梯度调度研究**1.3 路径规划方面**1.3.1 旅行商问题研究(TSP、TSPTW)1.3.2 各类车辆路径规划问题研究(vrp、VRPTW、CVRP)1.3.3 机器人路径规划问题研究1.3.4 无人机三维路径规划问题研究1.3.5 多式联运问题研究1.3.6 无人机结合车辆路径配送**1.4 三维装箱求解****1.5 物流选址研究**1.5.1 背包问题1.5.2 物流选址1.5.4 货位优化##### 1.6 电力系统优化研究1.6.1 微电网优化1.6.2 配电网系统优化1.6.3 配电网重构1.6.4 有序充电1.6.5 储能双层优化调度1.6.6 储能优化配置### 2 神经网络回归预测、时序预测、分类清单**2.1 bp预测分类****2.2 lssvm预测分类****2.3 svm预测分类****2.4 cnn预测分类**##### 2.5 ELM预测分类##### 2.6 KELM预测分类**2.7 ELMAN预测分类**##### 2.8 LSTM预测分类**2.9 RBF预测分类**##### 2.10 DBN预测分类##### 2.11 FNN预测##### 2.12 DELM预测分类##### 2.13 BIlstm预测分类##### 2.14 宽度学习预测分类##### 2.15 模糊小波神经网络预测分类##### 2.16 GRU预测分类### 3 图像处理算法**3.1 图像识别**3.1.1 车牌、交通标志识别(新能源、国内外、复杂环境下车牌)3.1.2 发票、身份证、银行卡识别3.1.3 人脸类别表情识别3.1.4 打靶识别3.1.5 字符识别(字母、数字、手写体、汉字、验证码)3.1.6 病灶识别3.1.7 花朵、药材、水果蔬菜识别3.1.8 指纹、手势、虹膜识别3.1.9 路面状态裂缝识别3.1.10 行为识别3.1.11 万用表表盘识别3.1.12 人民币识别3.1.13 答题卡识别**3.2 图像分割****3.3 图像检测**3.3.1 显著性检测3.3.2 缺陷检测3.3.3 疲劳检测3.3.4 病害检测3.3.5 火灾检测3.3.6 行人检测3.3.7 水果分级**3.4 图像隐藏****3.5 图像去噪****3.6 图像融合****3.7 图像配准****3.8 图像增强****3.9 图像压缩**##### 3.10 图像重建### 4 信号处理算法**4.1 信号识别****4.2 信号检测****4.3 信号嵌入提取****4.4 信号去噪**##### 4.5 故障诊断##### 4.6 脑电信号##### 4.7 心电信号##### 4.8 肌电信号### 5 元胞自动机仿真**5.1 模拟交通流****5.2 模拟人群疏散****5.3 模拟病毒扩散****5.4 模拟晶体生长**### 6 无线传感器网络##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化)##### 6.2 无线传感器覆盖优化##### 6.3 无线传感器通信及优化(Leach协议优化)##### 6.4 无人机通信中继优化(组播优化)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值