博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
素数伴侣
阅读量:7100 次
发布时间:2019-06-28

本文共 2050 字,大约阅读时间需要 6 分钟。

hot3.png

题目描述

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

输入描述

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

输出描述

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

输入例子

42 5 6 13

输出例子

2

算法实现

import java.util.Arrays;import java.util.Scanner;/** * 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];    }}

转载于:https://my.oschina.net/u/2822116/blog/823452

你可能感兴趣的文章
BZOJ4557:[JLOI2016/SHOI2016]侦察守卫——题解
查看>>
通过Ajax和SpringBoot交互的示例
查看>>
可重入函数与不可重入函数
查看>>
[转] 深入剖析 linux GCC 4.4 的 STL string
查看>>
常用Web Service汇总(天气预报、时刻表等)
查看>>
resin app server安装总结
查看>>
抓取新浪新闻列表实例
查看>>
[04-06]鼠标悬停图片时,实现抖动效果
查看>>
抽象类和接口的区别
查看>>
react 自定义 TabBar 组件
查看>>
Palindrome Pairs
查看>>
项目测试随笔
查看>>
poj3261 -- Milk Patterns
查看>>
HttpClient获取返回类型为JSON或XML的数据
查看>>
python 自动化对比返回结果
查看>>
SQLite分页语句
查看>>
cesiumjs开发实践(六) CZML
查看>>
Delphi窗体中禁用最大化按钮
查看>>
K均值
查看>>
基于FPGA的dds发生器与lcd显示参数
查看>>