zoukankan      html  css  js  c++  java
  • 哥德巴赫猜想 Java实现

    1.接口实现

    package goldbach;
    /**
     * 输入一个大于6的偶数,请输出这个偶数能被分解为哪两个质数的和。如:10=3+7 12=5+7
     * 此为按接口实现类完成
     * 
     * @author GGGXXC
     *
     */
    public class InterfaceGoldbachGuess {
        public static void main(String[] args) {
            divideNum(new InterGoldBach(), 100);
        }
    
        /**
         * 将两个数字分成两个,分别判断是不是素数
         * @param cp 传入的CheckPrime接口的实现类
         * @param target 传入的目标值
         */
        public static void divideNum(CheckPrime cp, int target) {
            for (int i = 2; i <= target / 2; i++) {
    
                if (cp.isPrime(i) && cp.isPrime(100 - i)) {
                    System.out.println(i + "和" + (target - i));
                }
    
            }
    
        }
    
    }
    
    /**
     * 定义检查一个整数是不是素数的接口
    */
    interface CheckPrime {
        boolean isPrime(int n);
    }
    /**
     * 采用接口的方式检查某个整数是不是素数
     * 
     * @author GGGXXC
     *
     */
    class InterGoldBach implements CheckPrime {
        public  boolean isPrime(int n) { // 这里能加上static吗?
    
            int k = 2;
    
            while (k <= n / 2) {
                if (n % k == 0) {
                    return false;
                }
                k++;
            }
            return true;
        }
    }

    2.封装实现

    package goldbach;
    
    /**
     * 输入一个大于6的偶数,请输出这个偶数能被分解为哪两个质数的和。如:10=3+7 12=5+7
     * 此为封装成方法的方式
     * 
     * @author GGGXXC
     *
     */
    public class Goldbach {
        public static void main(String[] args) {
    
            int target = 100;
    
            for (int i = 2; i <= target / 2; i++) {
                boolean ret = isPrime(i) && isPrime(100 - i);
    
                if (ret) {
                    System.out.println(i + "和" + (target - i));
                }
            }
    
        }
    
        /**
         * 判断传入的数字是不是质数
         * 
         * @param num 需要判断是否是质数的数字
         * @return 是质数返回true,不是质数返回false
         */
        public static boolean isPrime(int num) {
    
            int k = 2;
    
            while (k <= num / 2) {
                if (num % k == 0) {
                    return false;
                }
                k++;
            }
            return true;
        }
    
    }
  • 相关阅读:
    equa与==的区别
    使用Log4j进行日志操作
    动态代理的步骤
    批量插入使用SqlBulkCopy
    SQL之开窗函数二——在复杂场景中的实际运用
    SQL Server数据类型详解
    SQL Server遍历表的几种方法
    SQL Server之表变量
    SQL Server之字符串处理函数
    SQL Server之String_Split函数(SQL Server2016版本以上使用)
  • 原文地址:https://www.cnblogs.com/raising/p/12865712.html
Copyright © 2011-2022 走看看