程序地址:http://www.cheemoedu.com/exercise/26
问题描述:
众所周知,哥德巴赫猜想的证明是一个世界性的数学难题,至今未能完全解决。我国著名数学家陈景润为哥德巴赫猜想的证明作出过杰出的贡献。
所谓哥德巴赫猜想是说任何一个大于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都应该算是对的吧!
时间: 2024-11-10 07:28:54