问题描述:
众所周知,哥德巴赫猜想的证明是一个世界性的数学难题,至今未能完全解决。我国著名数学家陈景润为哥德巴赫猜想的证明作出过杰出的贡献。
所谓哥德巴赫猜想是说任何一个大于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