问题描述:

众所周知,哥德巴赫猜想的证明是一个世界性的数学难题,至今未能完全解决。我国著名数学家陈景润为哥德巴赫猜想的证明作出过杰出的贡献。
所谓哥德巴赫猜想是说任何一个大于2的偶数都能表示成为两个素数之和。
编写程序,验证指定范围内哥德巴赫猜想的正确性,也就是近似证明哥德巴赫猜想。


我的代码:

import math
def prime(m):
    count=0
    for i in range(2,int(math.sqrt(m))+1):
        if m%i==0:
            count=1
    if count==1:
        return False
    else:
        return True
a=[]
b=[]
for j in range(2,10):
    if prime(j):
        a.append(j)
for k in a:
    for l in a:
        if (k+l)%2==0 and (k+l) not in b:
            b.append(k+l)
            print "%d=%d+%d" % (k+l,k,l)
#print b


结果:

4=2+2

6=3+3

8=3+5

10=3+7

12=5+7

14=7+7


我的思路:

先求出2到10之间的所有素数a=[2,3,5,7],那么判断的范围就是(包括)2*2到2*7之间的偶数了,判断方法就是判断a中任意两个素数之和是否为偶数(且去重)并添加进列表(素数所组成的4到14之间的所有偶数都在该列表中),最后输出详细结果;

简而言之,我的方法是通过素数的范围来验证的,不是直接根据偶数的范围来验证的;


示例代码:

def isPrimeNumber(n, s):
    for k in s:
        if k ** 2 > n: break
        if n % k == 0: return False
    return True
def fun():
    s = [3]
    for n in xrange(6, 15, 2):
        f = False
        for k in s:
            t = n - k
            if t < k:
                break
            if isPrimeNumber(t, s):
                print '%s = %s + %s' % (n, k, t)
                if t > s[-1]: s.append(t)
                f = True
                break
        if not f: raise Exception
fun()


结果(将100000修改为15,只列出部分):

6 = 3 + 3

8 = 3 + 5

10 = 3 + 7

12 = 5 + 7

14 = 3 + 11


不明白为什么4不算,没有说两个素数必须不同,那么4=2+2也符合题意的吧,而且14=7+7

14=3+11都应该算是对的吧!


题目出处:http://www.cheemoedu.com/exercise/26