一个比较高效的素数判断算法

该博客介绍了一种高效的素数判断算法,结合了三条规则:1) 大于3的素数在6的倍数前一个或后一个;2) 只需判断到根号n;3) 若n不能被2整除,则可跳过所有偶数。通过这些规则,算法的时间复杂度降低至sqrt(n)/12,并给出了Python实现。
摘要由CSDN通过智能技术生成

高效素数判断算法

算法概述

此算法将其他博主对基本素数算法的一些改进进行了整合,其中主要整合了如下三条规则:

  1. 大于3的素数一定在6的倍数前一个或后一个(如素数37在36的后面)
  2. 要判断n是否为素数,只需要让n从2开始,依次除到根号n即可
  3. 在进行“让n从2开始,依次除到根号n”过程中,若n除以2的余数不为0,可以直接跳过[2, sqrt(n)]里面的所有偶数

博主语文素养不高,表达不是很准确,在后面会对这三条规则进行解释。

规则详解

  1. 大于3的素数一定在6的倍数前一个或后一个(如素数37在36的后面)
  • 数学证明:

任意一个整数n可以表示为n = 6a + b ( 0 <= b <= 5, a >= 0 ),接下来依次讲当n等于0到5的情况,以对此结论进行证明:
当n = 6a + 0 = 6a时,n有一个不为1及其本身的因数(素数判断条件)6,此类数不为素数
当n = 6a + 2 = 2( 3a + 1 )时,n有一个不为1及其本身的因数(素数判断条件)2,此类数不为素数
当n = 6a + 3 = 3( 2a + 1 )时,同上,有一因数3,此类数也不为素数
当n = 6a + 4 = 2( 3a + 2 )时,有一因数2, 此类数也不为素数
而当n = 6a + 1 或 n = 6a + 5时,不能绝对确定n是否为素数,需要考虑a的取值,显然此时的数值n就是分布在6的倍数前一个或后一个
总结:大于3的素数一定分布在6的倍数前后

  • 此规则可以直接对素数进行初步筛选,不符合此规则的数可直接判定为非素数,直接减少了2/3的运算量,效率提高肉眼可见
  • 注意小于等于3的素数(2, 3)需要另外判断
  1. 要判断n是否为素数,只需要让n从2开始,依次除到根号n即可

最基本的素数判断方法是:让n从2开始除ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值