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;
        }
    
    }
  • 相关阅读:
    UIFont的使用和字体类型总结
    LOJ-10100(割点个数)
    LOJ-10099(点双联通)
    poj-3177(并查集+双联通分量+Tarjan算法)
    图论:割点和桥
    牛客训练五:炫酷数学(思维)
    牛客训练五:炫酷路途(c++与dp)
    并查集的两种实现(按秩合并+路径压缩)
    牛客训练六:海啸(二维树状数组+vector函数的使用)
    牛客训练六:美食(贪心)
  • 原文地址:https://www.cnblogs.com/raising/p/12865712.html
Copyright © 2011-2022 走看看