项目实践 验证哥德巴赫猜想
1742年6月,德国著名的数学家哥德巴赫(C.Goldbah 1690-1764)预言“任何一个6以上的偶数都可以分解为两个素数的和”, 这就是著名的哥德巴赫猜想,俗称“1+1=2”。例如6=3+3,8=5+3,10=5+5…等,这个问题得到千千万万个数的验试,但至今未得到数学证明。
1742年6月,德国著名的数学家哥德巴赫(C.Goldbah 1690-1764)预言
“任何一个6以上的偶数都可以分解为两个素数的和”
这就是著名的哥德巴赫猜想,俗称“1+1=2”,例如
6=3+3
8=5+3
10=5+5
一个偶数分解成两个素数的和的分解不是唯一的,例如
24=5+19
24=17+7
这个问题得到千千万万个数的验试,但至今未得到数学证明。
解决思想:
对于任意一个偶数n,问题是要找到一个比n小的素数p ,使q=n-p也为素数,这样n 便分解为p与q=n-p 两个素数之和。
显然n=p+q可以假定p<=n/2,设置maxp=n//2
构造p=1,3,5,....,maxp的循环,判断p是否时素数
如果不是就p=p+2换下一个p再继续
如果p是素数,就判断q=n-p是否时素数,如果不是就继续p=p+2的下一个p测试
如果q也是素数,于是就找到一个分解n=p+q,其中p,q都是素数。
#输入偶数,如果不满足要求就继续输入
while True:
n=input("输入6以上的偶数:")
n=int(n)
if n%2==0 and n>=6:
break
#p的最大值maxp
maxp=n//2
p=1
while p<=maxp:
#判断p是否是素数,flag=True表示是素数
flag=True
for k in range(2,p):
if p%k==0:
#p可以被比它小的整数除尽,不是素数
flag=False
break
#如果p是素数,再次判断q是否时素数
if flag:
q=n-p
for k in range(2,q):
if q %k==0:
# q可以被比它小的整数除尽,不是素数
flag=False
break
#q也是素数,得到一个分解n=p+q
if flag:
print(n,"=",p,"+",q)
p=p+2
print("done!")

