Python 确定质数太慢了
所以我解决了一个关于代码战的问题,但它太慢,效率太低。以下是我编写的代码:Python 确定质数太慢了,python,performance,Python,Performance,所以我解决了一个关于代码战的问题,但它太慢,效率太低。以下是我编写的代码: def is_prime(number): if number > 1: for i in range(2, number): if number % i == 0: return False break else: return True else: return False 有什么方法可以加快速度吗?有几种
def is_prime(number):
if number > 1:
for i in range(2, number):
if number % i == 0:
return False
break
else:
return True
else:
return False
有什么方法可以加快速度吗?有几种简单的加速方法: a) 除2外,所有素数都是奇数,因此可以按2的步骤进行迭代。
b) 所有非素数必须至少有一个因子小于或等于n的平方根,因此只需检查n的平方根以下的数字 加上这些,如果速度不够快的话,还有很多其他的加速。也可以看看像米勒·拉宾这样的概率素性测试 对这篇文章的评论包括:
- 所有大于3的素数都与1或5(mod 6)全等,因此您可以以6的步骤进行迭代,并一次检查两个数字
另一种使速度加倍的简单方法是忽略偶数。此外,您只需检查数字一半的范围,因为除以数字一半将得到2,除以1将得到数字本身,因此介于之间的所有内容都必须是介于1和2之间的数字,您不需要检查质数是否正确将问题发布在“为什么不浏览此处关于检测质数的数千个其他问题?”中提示:您正在循环到该数字,而您只需要循环到平方根。另一条评论:你的
break
语句无法访问。“最多n”看起来像一个打字错误(特别是考虑到你刚才所说的平方根),你当然完全正确。我编辑过“小于平方根”->“小于或等于平方根”除了2和3之外,没有素数不是6n+/-1
,所以你可以从5开始,交替添加2和4:5、7、11、13、17、21、23,等等。您仍然需要检查素性,但样本空间小于2n+3
——您将检查1/3candidates@paxdiablo如果为True,或者如果更简单,则以6个步骤进行迭代,并在每次迭代中检查两个因子。