如何改进这个函数来确定素数?

2024-04-19 19:00:57 发布

您现在位置:Python中文网/ 问答频道 /正文

几天前我在一次采访中被问到这个问题,我想改进我在面试中给出的解决方案。到目前为止,这就是我所拥有的。不知道该如何提高效率。首先我想:

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 

Tags: 方法falsetruereturnif时间情况运算符
1条回答
网友
1楼 · 发布于 2024-04-19 19:00:57

1)理论上没有,但实际上是。它不会降低O表示法的时间复杂度,但在实践中可以降低时间复杂度,因为您不考虑偶数。因此,这个程序可以快2倍。你知道吗

2)如评论中所述,这通常是有益的。你知道吗

3)当然。您刚刚考虑了sqrt(i),它将时间复杂度从O(i)降低到O(sqrt(i))。你知道吗

4)这不是一个问题。然而,这是事实。你知道吗

5)再说一遍,这不是一个问题。但是,这是合理的,因为您已经检查了i是不均匀的。你知道吗

相关问题 更多 >