python - Project Euler 任务#10 Python 错误答案
问题描述
欧拉计划#10的任务是: 10 以下的素数之和为 2 + 3 + 5 + 7 = 17。求所有低于 200 万的素数之和。
我很困惑为什么我的代码给了我一个错误的答案1000000000001
。这里是:
def prime(a):
for i in range(2,a):
if a % i == 0:
return False
break
return True
sum = 2
for n in range(3,2000000,2):
if prime(n):
sum += n
print(sum)
有人可以解释一下它到底有什么问题吗?
解决方案
您从 for 循环中返回得太早:
def prime(a):
if a < 2:
return False
if a == 2:
return True
for i in range(2,a):
if a % i == 0:
return False
# should be after checking all numbers
return True # this line
此外,您只需要检查sqrt(a)
并排除偶数。
import math
# skip even numbers
def prime(a):
if a == 2:
return True
if a % 2 == 0:
return False
n = math.ceil(math.sqrt(a))
for i in range(3, n+1, 2):
if a % i == 0:
return False
return True
推荐阅读
- mongodb - 从经过身份验证的用户那里获取所有文档(关系 OneToMany)
- java - Maven:“引起:java.lang.NoClassDefFoundError:com/omnesys/omne/om/OMN”
- java - 构造函数只应在 SonarQube 工具中调用不可覆盖的方法
- boost - 使用 mingw g++ 编译器在控制台编程环境中使用 boost
- keras - 在 tf.keras 模型中使用 keras h5 权重
- kubernetes - 父级的多个实例使用的 Helm 子图
- android - 升级到 gradle 4.0.0 杀死了按钮文本颜色
- mysql - MySQL 查询有什么问题?慢,并且有 Null 字段
- abap - 检查 WHERE 子句中 STRING_TABLE 中的值
- git - 将多个项目添加到一个 Git 存储库中