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

问题描述 投票:-4回答:1

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

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 
python performance math numbers theory
1个回答
0
投票

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

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

3)当然。你刚刚考虑过sqrt(i),它可以减少从O(i)O(sqrt(i))的时间复杂度。

4)这不是一个问题。但是,这是事实。

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

© www.soinside.com 2019 - 2024. All rights reserved.