以下是原始问题euler project 50 正如问题所述“连续素数低于千分之一,加上素数,包含21个术语”
所以我开始在21个学期之后找到答案
接下来如果!arr [i..i + d + c] .reduce(:+)。prime?
问题出在
打破if!arr [i..i + d + c] .reduce(:+)。prime?
如果没有连续素数添加到素数,我想尽快离开while循环。事实证明,在该范围内没有连续的质数来补偿我的逻辑。请赐教。
require 'mathn'
def consecutive_prime_sum
arr = []
Prime.each do |i|
break if i > 1000000
arr << i
end
max,sum = 0,0
d = 20
arr.each_index do |i|
c = 1
next if !arr[i..i+d+c].reduce(:+).prime?
while i+d+c <= arr.size - 1
break if !arr[i..i+d+c].reduce(:+).prime?
if c > max && arr[i..i+d+c].reduce(:+) > sum && arr[i..i+d+c].reduce(:+).prime?
max = c
sum = arr[i..i+d+c].reduce(:+)
end
c= c + 1
end
end
sum
end
p consecutive_prime_sum