几天前我在一次采访中被问到这个问题,我想改进我在面试中给出的解决方案。到目前为止,这就是我所拥有的。不知道该如何提高效率。首先我想:
1)添加i%2==0行是否节省时间?你知道吗
2)python中%运算符的时间复杂度是多少?有没有一种方法可以在不使用%的情况下检查一个数字是否可以被更快的方法整除?你知道吗
3)d<;=数学.sqrt(i) 利用这样一个事实:计算除数超过i的平方根是没有用的,因为在d=i之前d不会很好地除以i。这是否表示了最佳的步数?你知道吗
4)我从d=3开始,因为我是奇数
5)从第四点开始,我增加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
是不均匀的。你知道吗相关问题 更多 >
编程相关推荐