如何改善此功能以确定素数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何改善此功能以确定素数?相关的知识,希望对你有一定的参考价值。
几天前我在一次采访中被问到这个问题,并希望改进我在此期间提供的解决方案。到目前为止,这就是我所拥有的。不知道如何提高效率。我猜对于初学者:
1)添加i%2 == 0行是否节省时间?
2)python中%运算符的时间复杂度是多少?有没有办法检查一个数字是否可以通过更快的方式整除而不使用%?
3)d <= math.sqrt(i)利用了这样的事实:计算除了i的平方根之后的除数是无用的,因为在d = i之前d不会很好地除以。这是否表示最佳步骤数?
4)我从d = 3开始,因为它是给定的,我是奇数
5)离开第4点,我增加2而不是1,因为它是给定的我是奇数。
def is_prime(i):
if i < 2:
return False
if i == 2:
return True
d = 3
if i%2 == 0: #skip even numbers
return False
while d <= math.sqrt(i):
if i%d == 0:
return False
d += 2
return True
答案
1)理论上没有,但在实践中是的。它并没有减少O
表示法中的时间复杂度,但在实践中可以减少,因为你不考虑偶数。因此,该程序可以快2倍。
2)如评论中所述,它通常是有益的。
3)当然。你刚刚考虑过sqrt(i)
,它可以减少从O(i)
到O(sqrt(i))
的时间复杂度。
4)这不是一个问题。但是,这是事实。
5)同样,这不是一个问题。但是,这是合理的,因为你检查i
不是偶数。
以上是关于如何改善此功能以确定素数?的主要内容,如果未能解决你的问题,请参考以下文章
如何为drupal添加状态代码410以删除内容以改善SEO?