python - 不正确的输出 Project Euler #50
问题描述
欧拉计划问题 50 内容如下:
素数 41 可以写成六个连续素数之和:
41 = 2 + 3 + 5 + 7 + 11 + 13 这是添加到小于 100 的素数的最长连续素数之和。
加到一个素数上的小于一千的连续素数的最长和包含 21 项,等于 953。
100 万以下的哪个素数可以写成最连续素数之和?
在我的方法中,我使用 eratosthenes 筛预生成一个素数列表,然后在函数本身中,我不断添加我的素数列表的后续元素,每次我这样做时,我都会检查总和本身是否为素数,如果是,我会跟踪它作为最大的一个并返回它。那我猜应该可以吗?显然答案是不正确的,但有趣的是,当我改变筛子以生成低于 100000 的素数时,它不会给出索引错误,而是给出另一个结果。
from algorithms import gen_primes
primes = [i for i in gen_primes(1000000)]
def main(n):
idx, total, maximum = 0, 0, 0
while total < n:
total += primes[idx]
idx += 1
if total in primes:
maximum = total
return maximum
print(main(1000000))
解决方案
你的程序不能解决一般问题:你总是从最低的开始你的连续素数列表,2
. 因此,您返回的是从 2* 开始的最长连续列表,而不是任何连续的素数列表。
简而言之,您需要另一个循环...
start_idx = 0
while start_idx < len(primes) and best_len*primes[start_idx] < n:
# find longest list starting at primes[start_idx]
start_idx += 1
如果有任何帮助,成功的序列从 1500 到 2000 开始。
推荐阅读
- java - JAVA:当日志文件要翻转时在应用程序中暂停
- amazon-web-services - Redshift 工作负载管理规则含义
- sharepoint - 我在哪里可以获得共享点页面的源代码?
- angular2-routing - 这个路由代码有什么问题 - Angular 8
- c - 为 64 个元素排序网络交换
- laravel - 如何将 Vue 添加到现有的 Laravel 项目中?
- android - SMS检索器api android在vivo v15 pro,redmi note 4中不起作用
- java - 无法在休息控制器中重定向响应
- android - 不支持的附件
- angular - 从 http 请求数据创建表单