“机器证明“哥德巴赫猜想

机器证明的本质即在一定范围内穷举验证,因此机器证明只能证明某个猜想在一定范围内是否成立。无法像数学推理一样证明某个猜想或定理的普适性。

哥德巴赫猜想

概念:任意一个大于等于4的偶数总可以分解为两个素数之和。

1、判断素数函数

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn s

2、判断用户输入n是否符合哥德巴赫猜想

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn sn=int(input())
for i in range(2,n):if prime(i) and prime(n-i):print(i,n-i)break

3、证明100000000以内的偶数符合哥德巴赫猜想

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn sfor n in range(4,100000001,2):for i in range(2,n):if prime(i) and prime(n-i):print(n,"符合猜想")break

反思:数据太多,要一个个检查看出去,是否可以简化?最终输出是否有不符合猜想

4、改进后的程序

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn sans=0
for n in range(4,100000001,2):s=Falsefor i in range(2,n):if prime(i) and prime(n-i):s=Trueprint(n,"符合猜想")breakif s==False:ans+=1print(n,"不符合猜想")
print("1亿以内有",ans,"个数不符合猜想")

5、奇数是什么情况?一万以内有多少奇数符合猜想,多少不符合

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn sans1=0
ans2=0
for n in range(5,10001,2):s=Falsefor i in range(2,n):if prime(i) and prime(n-i):s=Trueans1+=1print(n,"符合猜想")breakif s==False:ans2+=1print(n,"不符合猜想")
print("一万以内有",ans1,"个奇数符合猜想")
print("一万以内有",ans2,"个奇数不符合猜想")# 结果
# 一万以内有 1228 个奇数符合猜想
# 一万以内有 3770 个奇数不符合猜想

分析后发现奇数符合猜想的情况一定是:
奇数=2+素数
那么求 [5,9999] 以内有多少个奇数符合猜想,可转换为 [3,9997] 有多少个素数

def prime(n):s=Truefor i in range(2,int(n**0.5+1)):if n%i==0:s=Falsebreakreturn sans=0
for i in range(3,9998,2):if prime(i):ans+=1
print("[3,9997] 有",ans,"个素数")# 结果:
# [3,9997] 有 1228 个素数


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部