哥德巴赫猜想输出符合规则的偶数分解的两个质数

package _2018年5月19日_19点02;


import java.util.Scanner;

/**
 * 2018年5月18日 22:10:03
 * 
 * @author SeeClanUkyo
 * 
 *         哥德巴赫猜想,输入一个大于6的偶数,能被分解为两个质数之和. 本程序再优化入手点应该从第一个for循环没有用到开始
 */
public class Goldbach {

    public static void main(String[] args) {

        System.out.println("请输入大于6的偶数,此偶数将试着分解为两个质数之和.");
        Scanner in = new Scanner(System.in);

        int number = in.nextInt();

        int halfNum = number / 2;
        if (number > 6 && number % 2 == 0) {

            // 输入数值符合条件进入该内容
            // 闯哥的递增递减for循环
            for (int i = halfNum; i < number; i++) {
                // m的值为总数-差值,即i+m=number
                //14为例,看i, m的值:
                
                //7 7
                //8 6
                //9 5
                //10 4
                //11 3
                //12 2
                

                int m = number - i;
                //
                if (i != 1 && m != 1) {
                    if (check(i) && check(m)) {
                        System.out.println(i + "+" + m + "=" + number);
                    }
                }

            }

        } else {
            System.out.println("请输入大于6的偶数!");
        }
    }

    // 如果传入数值n是质数,则返回true
    public static boolean check(int n) {
        boolean b = false;
        int count = 0;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            // 如果下面if等于,则说明这个数不是质数,count进行++.之后break
            if (n % i == 0) {
                count++;
                break;
            }
        }
        //for循环结束,count如果为1,则判定为质数了.
        if(count == 0) {
            b = true;
        }
        return b;

    }

}

感谢闯哥指点!

猜你喜欢

转载自www.cnblogs.com/ukzq/p/9068873.html
今日推荐