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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何改善此功能以确定素数?相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

以上是关于如何改善此功能以确定素数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们要检查素数的平方根以确定它是不是为素数?

如何从设置中获取数据并发送到此片段

如何确定一个数字是不是是正则表达式的素数?

如何为drupal添加状态代码410以删除内容以改善SEO?

如何延迟或异步此 WordPress javascript 片段以最后加载以加快页面加载时间?

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?