给定任意偶数,验证哥德巴赫猜想(python)

本文介绍了使用Python验证哥德巴赫猜想的算法优化方法,包括六除法和小于sqrt(p)的整数乘积策略,减少了计算量。通过不断调整两个素数的大小来匹配目标偶数,直到找到符合条件的组合或超过目标值。
摘要由CSDN通过智能技术生成

给定任意偶数,验证哥德巴赫猜想(python)

简要介绍

院长给了个作业,如题,很有意思,关于质数的各种定律我还不是很清楚,因此我打算尽我可能优化一波。
事先说明,码的时候基本上是脑子想到说明就马上写什么,所以变量基本是随便命名,可读性不高,看我说明一下算法就够了。
我给自己下了个条件,不打表,速度会慢很多,至少我觉得会比筛法慢,不过这才有挑战性。

算法优化

大致可以分为两个部分,一个是六除法,一个是整数p可以由一个小于sqrt (p)的整数和一个大于sqrt(p)的整数相乘而得

1.六素数除法
关于这个的文章很少,但真的好用,不必细究原理,知道就行。
大致内容为:所有素数分布于6的倍数左右两侧(除2、3外),但是,6的倍数两侧不一定是素数
由此,我们可以将原本要计算的n个数给缩小到n/3个,减少了不少计算量

2.一个是整数p可以由一个小于sqrt (p)的整数和一个大于sqrt(p)的整数相乘而得(不记得有没有名字了)
顾名思义,除了sqrt(p)本身外,必定符合,证明需要动点脑筋。由此,我们只需要计算sqrt(n)个数就可以判断素数。这里我并不是从1到sqrt(n)直接遍历,而是mod2后都是mod一个6整数倍左右的数,这个方法会有重复,类似于埃式筛与欧拉筛的区别,不建议这样用。

第一个素数从1开始,然后是2、3,再之后就是使用六素数除法,第二个素数为p-p mod 6 +1 可以保证其mod6后为1或5,而当mod6为0时直接-1即可。
若两数之和大于输入的偶数,则小的素数变大,大的素数变小,若小于了,则跳出,因为接下来就无意义了。
判断素数时先判断小的,因为判断得快,再此条件成立后才判断第二个素数。

代码

import time
import math
def judge(num):
 tm1 = time.time()   
 if num%2 != 0:
    print("请输入一个偶数")
 elif num == 2:
    print("i=1,j=1")             #因为后面直接从2开始,所以这边将小于2+2的直接硬编码
 elif num == 4:
    
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值