• 哥德巴赫猜想 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;
        }
    
    }
  • 相关阅读:
    LIB和 DLL区别
    C++ STL总结
    浅谈static和extern关系
    死锁及处理
    函数模板与模板函数
    Linux无法启动httpd_正在启动httpd
    httpd不允许远程连接问题
    虚拟机UUIDexist_更改UUID
    MySQL远程连接丢失问题
    Apache服务端允许跨域
  • 原文地址:https://www.cnblogs.com/raising/p/12865712.html
Copyright © 2020-2023  润新知