Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定质数太慢了_Python_Performance - Fatal编程技术网

Python 确定质数太慢了

Python 确定质数太慢了,python,performance,Python,Performance,所以我解决了一个关于代码战的问题,但它太慢,效率太低。以下是我编写的代码: def is_prime(number): if number > 1: for i in range(2, number): if number % i == 0: return False break else: return True else: return False 有什么方法可以加快速度吗?有几种

所以我解决了一个关于代码战的问题,但它太慢,效率太低。以下是我编写的代码:

def is_prime(number):
if number > 1:
    for i in range(2, number):
        if number % i == 0:
            return False
            break
    else:
        return True
else:
    return False

有什么方法可以加快速度吗?

有几种简单的加速方法:

a) 除2外,所有素数都是奇数,因此可以按2的步骤进行迭代。
b) 所有非素数必须至少有一个因子小于或等于n的平方根,因此只需检查n的平方根以下的数字

加上这些,如果速度不够快的话,还有很多其他的加速。也可以看看像米勒·拉宾这样的概率素性测试

对这篇文章的评论包括:

  • 所有大于3的素数都与1或5(mod 6)全等,因此您可以以6的步骤进行迭代,并一次检查两个数字

大多数现代计算机使用的是多核,因此,如果您使用所有核并行运行,它应该运行得更快

你可以在核心之间划分范围,比如说如果你有10个核心,那么每个核心可以检查核心编号的模块


另一种使速度加倍的简单方法是忽略偶数。

此外,您只需检查数字一半的范围,因为除以数字一半将得到2,除以1将得到数字本身,因此介于之间的所有内容都必须是介于1和2之间的数字,您不需要检查质数是否正确

将问题发布在“为什么不浏览此处关于检测质数的数千个其他问题?”中提示:您正在循环到该数字,而您只需要循环到平方根。另一条评论:你的
break
语句无法访问。“最多n”看起来像一个打字错误(特别是考虑到你刚才所说的平方根),你当然完全正确。我编辑过“小于平方根”->“小于或等于平方根”除了2和3之外,没有素数不是
6n+/-1
,所以你可以从5开始,交替添加2和4:5、7、11、13、17、21、23,等等。您仍然需要检查素性,但样本空间小于
2n+3
——您将检查1/3candidates@paxdiablo如果为True,或者如果更简单,则以6个步骤进行迭代,并在每次迭代中检查两个因子。