• 牛客 HJ28 素数伴侣


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

    输入:

    有一个正偶数 n ,表示待挑选的自然数的个数。后面给出 n 个具体的数字。

    输出:

    输出一个整数 K ,表示你求得的“最佳方案”组成“素数伴侣”的对数。

    数据范围: 1 ≤ n ≤ 100 { 1 \le n \le 100 } 1n100 ,输入的数据大小满足 2 ≤ v a l ≤ 30000 {2 \le val \le 30000 } 2val30000

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

    输出描述:
    求得的“最佳方案”组成“素数伴侣”的对数。

    示例1

    输入:
    4
    2 5 6 13
    输出:
    2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    示例2

    输入:
    2
    3 6
    输出:
    0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    java 实现

    package nowcoder.x2x;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class HJ028 {
        /**
         * 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
         */
        private static boolean isPrime(int a) {
            if (a == 1) {
                return false;
            }
            for (int i = 2; i <= (int) Math.sqrt(a); i++) {
                if (a % i == 0) {
                    return false;
                }
            }
            return true;
        }
    
        private static boolean find(int x,
                                    int[] matcheven,
                                    List<Integer> evens,
                                    boolean[] v) {
            for (int i = 0; i < evens.size(); i++) {
                // 该位置偶数没被访问过,并且能与x组成素数伴侣
                if (isPrime(x + evens.get(i)) && v[i] == false) {
                    v[i] = true;
                    /*如果i位置偶数还没有伴侣,则与x组成伴侣,如果已经有伴侣,并且这个伴侣能重新找到新伴侣,
                    则把原来伴侣让给别人,自己与x组成伴侣*/
                    if (matcheven[i] == 0 || find(matcheven[i], matcheven, evens, v)) {
                        matcheven[i] = x;
                        return true;
                    }
                }
            }
            return false;
        }
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line1 = br.readLine();
            String line2 = br.readLine();
    
            String[] s = line2.split(" ");
    
            List<Integer> odds = new ArrayList<>();
            List<Integer> evens = new ArrayList<>();
    
            // 奇偶数分组
            for (String value : s) {
                int temp = Integer.parseInt(value);
                if ((temp & 1) == 0) {
                    evens.add(temp);
                } else {
                    odds.add(temp);
                }
            }
    
            int[] matchEven = new int[evens.size()];
    
            int count = 0;
            for (Integer odd : odds) {
                boolean[] b = new boolean[evens.size()];
                if (find(odd, matchEven, evens, b)) {
                    count++;
                }
            }
    
            System.out.println(count);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
  • 相关阅读:
    谈谈医疗行业数据治理的四个关键阶段【后附医院数据治理案例】
    暑期JAVA学习(45)动态代理
    log4j:WARN No appenders could be found for logger
    DECIMAL 数据处理原理浅析
    Vue生成带图片logo以及文字的二维码组件,可下载二维码为图片,附组件调用代码--核心qrcode
    Linux内核分析(十五)--内存管理之虚拟地址与mmap原理
    【算法导论】贪心算法之赫夫曼编码
    无限滚动图片懒加载-Infinite-Scroll-Img-笔记学习
    实现实时美颜:主播直播美颜SDK的技术细节
    FastDFS-01-单机和集群搭建
  • 原文地址:https://blog.csdn.net/weixin_43820556/article/details/126589843