Project Euler第7题Python代码中all(...)语句解析与优化建议
Project Euler第7题代码解析与优化建议
一、代码行if all(x%i for i in primeList): ...的功能解释
这行代码核心作用是判断当前数x是否为质数,具体逻辑拆解:
x%i计算x除以i的余数:余数不为0时返回True,余数为0(x能被i整除)时返回False。all()函数校验迭代器内所有结果:只要有一个False就返回False,只有全部结果为True时才返回True。- 结合起来就是:遍历已找到的质数列表
primeList,若x能被列表中任意质数整除,all()返回False,说明x不是质数;只有当x无法被列表里任何质数整除时,all()返回True,x是质数,进入后续处理逻辑。
二、进一步优化建议
- 缩小质数检查范围:无需遍历整个
primeList,只需要检查到x的平方根即可。因为如果x存在大于其平方根的因数,必然对应一个小于平方根的因数,已经被检查过。修改为all(x%i for i in primeList if i*i <= x),能大幅减少循环次数。 - 跳过偶数检查:初始质数列表直接从
[2,3]开始,后续只生成奇数进行检查,减少一半的计算量。 - 采用生成器节省内存:如果目标是第N个超大质数,用生成器替代列表存储质数,按需生成并检查,避免占用过多内存。
- 改用埃拉托斯特尼筛法变种:对于较大的N,筛法(比如分段筛)的效率远高于逐个检查的方式,能更快定位到第N个质数。
- 减少模运算次数:提前过滤偶数,只对奇数执行模运算,降低耗时较高的模运算调用频率。
内容的提问来源于stack exchange,提问作者cerise hibiscus
相关产品推荐
相关产品推荐

