Algorithm JAVA写算法 验证哥德巴赫猜想

Algorithm JAVA写算法 验证哥德巴赫猜想

哥德巴赫猜想换成现代陈述为:任何一个大于5的整数都可以写成3个质数之和;另一个版本(欧拉):任何一个大于2的偶数都可以写成2个质数之和。
现在所说的哥德巴赫猜想一般都是置第二种,两个多世纪过去了,这一猜想即无法被证实也没有被推翻。


现在用java写算法,通过程序在4~100内验证这个猜想。


先获取4-100内所有偶数:

package algorithm;

/**
 * Created by zhaoyong on 2016/5/19.
 * 哥德巴赫猜想
 */
public class geDeBaHeCaiXiang {
    public static void main(String[] args) {
        for (int i = 4; i <= 100; i = i + 2) {
            System.out.print("4-100内所有偶数->" + i + "\n");
        }
    }
}

然后需要将每一个数i,拆分成a+b(a < b)的形式,a的范围是2~i/2,因为如果a>i/2,那么a+b肯定大于i了。
如果a和b都是质数,就将其打印出来。
先写个打印的方法,方便输出

private static void print(Object s) {
    System.out.print(s.toString() + "\n");
}

判断一个大于2的数是不是质数

    //判断一个大于2的数是不是质数
    private static boolean isPrime(int i) {
        for (int j = 2; j < i - 1; j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }

这里面就不用b了,因为b就是i-a,那就写成i-a好了,如果a是质数,i-a是质数,那么就满足条件

完整代码

package algorithm;

/**
 * Created by zhaoyong on 2016/5/19.
 * 哥德巴赫猜想
 */
public class geDeBaHeCaiXiang {

    public static void main(String[] args) {
        for (int i = 4; i <= 100; i = i + 2) {
            for (int a = 2; a <= i / 2; a++) {
                if (isPrime(a) && isPrime(i - a)) {
                    print(i + "是两个质数之和 = " + a + "+" + (i - a));
                    break;
                }
            }

        }
    }

    //判断一个大于2的数是不是质数
    private static boolean isPrime(int i) {
        for (int j = 2; j < i - 1; j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }

    //输出
    private static void print(Object s) {
        System.out.print(s.toString() + "\n");
    }

}

输出结果

4是两个质数之和 = 2+2
6是两个质数之和 = 3+3
8是两个质数之和 = 3+5
10是两个质数之和 = 3+7
12是两个质数之和 = 5+7
14是两个质数之和 = 3+11
16是两个质数之和 = 3+13
18是两个质数之和 = 5+13
20是两个质数之和 = 3+17
22是两个质数之和 = 3+19
24是两个质数之和 = 5+19
26是两个质数之和 = 3+23
28是两个质数之和 = 5+23
30是两个质数之和 = 7+23
32是两个质数之和 = 3+29
34是两个质数之和 = 3+31
36是两个质数之和 = 5+31
38是两个质数之和 = 7+31
40是两个质数之和 = 3+37
42是两个质数之和 = 5+37
44是两个质数之和 = 3+41
46是两个质数之和 = 3+43
48是两个质数之和 = 5+43
50是两个质数之和 = 3+47
52是两个质数之和 = 5+47
54是两个质数之和 = 7+47
56是两个质数之和 = 3+53
58是两个质数之和 = 5+53
60是两个质数之和 = 7+53
62是两个质数之和 = 3+59
64是两个质数之和 = 3+61
66是两个质数之和 = 5+61
68是两个质数之和 = 7+61
70是两个质数之和 = 3+67
72是两个质数之和 = 5+67
74是两个质数之和 = 3+71
76是两个质数之和 = 3+73
78是两个质数之和 = 5+73
80是两个质数之和 = 7+73
82是两个质数之和 = 3+79
84是两个质数之和 = 5+79
86是两个质数之和 = 3+83
88是两个质数之和 = 5+83
90是两个质数之和 = 7+83
92是两个质数之和 = 3+89
94是两个质数之和 = 5+89
96是两个质数之和 = 7+89
98是两个质数之和 = 19+79
100是两个质数之和 = 3+97

Process finished with exit code 0

这里输出的是a为最小值的时候i等于两个质数相加的结果,要是想输出所有的i等于两个质数相加,那么只要去掉main方法里面的break;就行了。
输出结果如下

4是两个质数之和 = 2+2
6是两个质数之和 = 3+3
8是两个质数之和 = 3+5
10是两个质数之和 = 3+7
10是两个质数之和 = 5+5
12是两个质数之和 = 5+7
14是两个质数之和 = 3+11
14是两个质数之和 = 7+7
16是两个质数之和 = 3+13
16是两个质数之和 = 5+11
18是两个质数之和 = 5+13
18是两个质数之和 = 7+11
20是两个质数之和 = 3+17
20是两个质数之和 = 7+13
22是两个质数之和 = 3+19
22是两个质数之和 = 5+17
22是两个质数之和 = 11+11
24是两个质数之和 = 5+19
24是两个质数之和 = 7+17
24是两个质数之和 = 11+13
26是两个质数之和 = 3+23
26是两个质数之和 = 7+19
26是两个质数之和 = 13+13
28是两个质数之和 = 5+23
28是两个质数之和 = 11+17
30是两个质数之和 = 7+23
30是两个质数之和 = 11+19
30是两个质数之和 = 13+17
32是两个质数之和 = 3+29
32是两个质数之和 = 13+19
34是两个质数之和 = 3+31
34是两个质数之和 = 5+29
34是两个质数之和 = 11+23
34是两个质数之和 = 17+17
36是两个质数之和 = 5+31
36是两个质数之和 = 7+29
36是两个质数之和 = 13+23
36是两个质数之和 = 17+19
38是两个质数之和 = 7+31
38是两个质数之和 = 19+19
40是两个质数之和 = 3+37
40是两个质数之和 = 11+29
40是两个质数之和 = 17+23
42是两个质数之和 = 5+37
42是两个质数之和 = 11+31
42是两个质数之和 = 13+29
42是两个质数之和 = 19+23
44是两个质数之和 = 3+41
44是两个质数之和 = 7+37
44是两个质数之和 = 13+31
46是两个质数之和 = 3+43
46是两个质数之和 = 5+41
46是两个质数之和 = 17+29
46是两个质数之和 = 23+23
48是两个质数之和 = 5+43
48是两个质数之和 = 7+41
48是两个质数之和 = 11+37
48是两个质数之和 = 17+31
48是两个质数之和 = 19+29
50是两个质数之和 = 3+47
50是两个质数之和 = 7+43
50是两个质数之和 = 13+37
50是两个质数之和 = 19+31
52是两个质数之和 = 5+47
52是两个质数之和 = 11+41
52是两个质数之和 = 23+29
54是两个质数之和 = 7+47
54是两个质数之和 = 11+43
54是两个质数之和 = 13+41
54是两个质数之和 = 17+37
54是两个质数之和 = 23+31
56是两个质数之和 = 3+53
56是两个质数之和 = 13+43
56是两个质数之和 = 19+37
58是两个质数之和 = 5+53
58是两个质数之和 = 11+47
58是两个质数之和 = 17+41
58是两个质数之和 = 29+29
60是两个质数之和 = 7+53
60是两个质数之和 = 13+47
60是两个质数之和 = 17+43
60是两个质数之和 = 19+41
60是两个质数之和 = 23+37
60是两个质数之和 = 29+31
62是两个质数之和 = 3+59
62是两个质数之和 = 19+43
62是两个质数之和 = 31+31
64是两个质数之和 = 3+61
64是两个质数之和 = 5+59
64是两个质数之和 = 11+53
64是两个质数之和 = 17+47
64是两个质数之和 = 23+41
66是两个质数之和 = 5+61
66是两个质数之和 = 7+59
66是两个质数之和 = 13+53
66是两个质数之和 = 19+47
66是两个质数之和 = 23+43
66是两个质数之和 = 29+37
68是两个质数之和 = 7+61
68是两个质数之和 = 31+37
70是两个质数之和 = 3+67
70是两个质数之和 = 11+59
70是两个质数之和 = 17+53
70是两个质数之和 = 23+47
70是两个质数之和 = 29+41
72是两个质数之和 = 5+67
72是两个质数之和 = 11+61
72是两个质数之和 = 13+59
72是两个质数之和 = 19+53
72是两个质数之和 = 29+43
72是两个质数之和 = 31+41
74是两个质数之和 = 3+71
74是两个质数之和 = 7+67
74是两个质数之和 = 13+61
74是两个质数之和 = 31+43
74是两个质数之和 = 37+37
76是两个质数之和 = 3+73
76是两个质数之和 = 5+71
76是两个质数之和 = 17+59
76是两个质数之和 = 23+53
76是两个质数之和 = 29+47
78是两个质数之和 = 5+73
78是两个质数之和 = 7+71
78是两个质数之和 = 11+67
78是两个质数之和 = 17+61
78是两个质数之和 = 19+59
78是两个质数之和 = 31+47
78是两个质数之和 = 37+41
80是两个质数之和 = 7+73
80是两个质数之和 = 13+67
80是两个质数之和 = 19+61
80是两个质数之和 = 37+43
82是两个质数之和 = 3+79
82是两个质数之和 = 11+71
82是两个质数之和 = 23+59
82是两个质数之和 = 29+53
82是两个质数之和 = 41+41
84是两个质数之和 = 5+79
84是两个质数之和 = 11+73
84是两个质数之和 = 13+71
84是两个质数之和 = 17+67
84是两个质数之和 = 23+61
84是两个质数之和 = 31+53
84是两个质数之和 = 37+47
84是两个质数之和 = 41+43
86是两个质数之和 = 3+83
86是两个质数之和 = 7+79
86是两个质数之和 = 13+73
86是两个质数之和 = 19+67
86是两个质数之和 = 43+43
88是两个质数之和 = 5+83
88是两个质数之和 = 17+71
88是两个质数之和 = 29+59
88是两个质数之和 = 41+47
90是两个质数之和 = 7+83
90是两个质数之和 = 11+79
90是两个质数之和 = 17+73
90是两个质数之和 = 19+71
90是两个质数之和 = 23+67
90是两个质数之和 = 29+61
90是两个质数之和 = 31+59
90是两个质数之和 = 37+53
90是两个质数之和 = 43+47
92是两个质数之和 = 3+89
92是两个质数之和 = 13+79
92是两个质数之和 = 19+73
92是两个质数之和 = 31+61
94是两个质数之和 = 5+89
94是两个质数之和 = 11+83
94是两个质数之和 = 23+71
94是两个质数之和 = 41+53
94是两个质数之和 = 47+47
96是两个质数之和 = 7+89
96是两个质数之和 = 13+83
96是两个质数之和 = 17+79
96是两个质数之和 = 23+73
96是两个质数之和 = 29+67
96是两个质数之和 = 37+59
96是两个质数之和 = 43+53
98是两个质数之和 = 19+79
98是两个质数之和 = 31+67
98是两个质数之和 = 37+61
100是两个质数之和 = 3+97
100是两个质数之和 = 11+89
100是两个质数之和 = 17+83
100是两个质数之和 = 29+71
100是两个质数之和 = 41+59
100是两个质数之和 = 47+53

Process finished with exit code 0

换一种好看点的输出形式

public static void main(String[] args) {
        for (int i = 4; i <= 100; i = i + 2) {
            String str = "";
            for (int a = 2; a <= i / 2; a++) {
                if (isPrime(a) && isPrime(i - a)) {
                    str = str + "=" + a + "+" + (i - a);
                }
            }
            print(i + "是两个质数之和 " + str);
        }
    }

输出结果

4是两个质数之和 =2+2
6是两个质数之和 =3+3
8是两个质数之和 =3+5
10是两个质数之和 =3+7=5+5
12是两个质数之和 =5+7
14是两个质数之和 =3+11=7+7
16是两个质数之和 =3+13=5+11
18是两个质数之和 =5+13=7+11
20是两个质数之和 =3+17=7+13
22是两个质数之和 =3+19=5+17=11+11
24是两个质数之和 =5+19=7+17=11+13
26是两个质数之和 =3+23=7+19=13+13
28是两个质数之和 =5+23=11+17
30是两个质数之和 =7+23=11+19=13+17
32是两个质数之和 =3+29=13+19
34是两个质数之和 =3+31=5+29=11+23=17+17
36是两个质数之和 =5+31=7+29=13+23=17+19
38是两个质数之和 =7+31=19+19
40是两个质数之和 =3+37=11+29=17+23
42是两个质数之和 =5+37=11+31=13+29=19+23
44是两个质数之和 =3+41=7+37=13+31
46是两个质数之和 =3+43=5+41=17+29=23+23
48是两个质数之和 =5+43=7+41=11+37=17+31=19+29
50是两个质数之和 =3+47=7+43=13+37=19+31
52是两个质数之和 =5+47=11+41=23+29
54是两个质数之和 =7+47=11+43=13+41=17+37=23+31
56是两个质数之和 =3+53=13+43=19+37
58是两个质数之和 =5+53=11+47=17+41=29+29
60是两个质数之和 =7+53=13+47=17+43=19+41=23+37=29+31
62是两个质数之和 =3+59=19+43=31+31
64是两个质数之和 =3+61=5+59=11+53=17+47=23+41
66是两个质数之和 =5+61=7+59=13+53=19+47=23+43=29+37
68是两个质数之和 =7+61=31+37
70是两个质数之和 =3+67=11+59=17+53=23+47=29+41
72是两个质数之和 =5+67=11+61=13+59=19+53=29+43=31+41
74是两个质数之和 =3+71=7+67=13+61=31+43=37+37
76是两个质数之和 =3+73=5+71=17+59=23+53=29+47
78是两个质数之和 =5+73=7+71=11+67=17+61=19+59=31+47=37+41
80是两个质数之和 =7+73=13+67=19+61=37+43
82是两个质数之和 =3+79=11+71=23+59=29+53=41+41
84是两个质数之和 =5+79=11+73=13+71=17+67=23+61=31+53=37+47=41+43
86是两个质数之和 =3+83=7+79=13+73=19+67=43+43
88是两个质数之和 =5+83=17+71=29+59=41+47
90是两个质数之和 =7+83=11+79=17+73=19+71=23+67=29+61=31+59=37+53=43+47
92是两个质数之和 =3+89=13+79=19+73=31+61
94是两个质数之和 =5+89=11+83=23+71=41+53=47+47
96是两个质数之和 =7+89=13+83=17+79=23+73=29+67=37+59=43+53
98是两个质数之和 =19+79=31+67=37+61
100是两个质数之和 =3+97=11+89=17+83=29+71=41+59=47+53

Process finished with exit code 0

好了,这样就写完了哥德巴赫猜想在100以内的验证了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章