几天前我在一次采访中被问到这个问题,并希望改进我在此期间提供的解决方案。到目前为止,这就是我所拥有的。不知道如何提高效率。我猜对于初学者:
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
答案 0 :(得分:0)
O
表示法中的时间复杂度,但在实践中可以减少,因为您不考虑偶数。因此,这个程序可以快2倍。
2)如评论中所述,这通常是有益的。
3)当然。您刚刚考虑sqrt(i)
,将时间复杂度从O(i)
降低到O(sqrt(i))
。
4)这不是一个问题。但事实确实如此。
5)同样,这不是一个问题。但是,这是合理的,因为您已检查i
不是偶数。