如何改进此功能以确定素数?

时间:2017-12-31 07:47:06

标签: python performance math numbers theory

几天前我在一次采访中被问到这个问题,并希望改进我在此期间提供的解决方案。到目前为止,这就是我所拥有的。不知道如何提高效率。我猜对于初学者:

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 个答案:

答案 0 :(得分:0)

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

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

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

4)这不是一个问题。但事实确实如此。

5)同样,这不是一个问题。但是,这是合理的,因为您已检查i不是偶数。

相关问题