哥德巴赫猜想 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;
    }

}

 

posted @ 2020-05-10 22:55  路漫漫兮其修远  阅读(533)  评论(0编辑  收藏  举报