私はこの問題は以下のように定義されたプロジェクトオイラーの問題#50(https://projecteuler.net/problem=50)を解決しようとしています:プロジェクトオイラー#50 - 連続プライム合計 - ルビー
ことができる一万人以下のプライム、を最も多くの 連続素数の和として書かれていますか?
私は2つの異なる解決策を提示していますが、両方とも同じ誤った答えを与えています。私は自分のリストを構築しているのでエラーが発生すると考えていますが、 。私のソリューションは、N = 10
とN = 100
でも動作しますが、N = 1000
では動作していないようです。どんな助けもありがとうございます。
解決策1:(出力= 958577)
require 'Prime'
# Initialising primes
N = 1_000_000
primes = {}
(2..N).each do |i|
primes[i] = true
end
i = 2
while i * i <= N
if primes[i]
j = i
while i * j <= N
primes[i * j] = false
j += 1
end
end
i += 1
end
# New prime list where total sum is less than N
new_primes = []
i = 2
sum = 0
while sum + i < N
if primes[i]
new_primes << i
sum += i
end
i += 1
end
# Keep removing last prime from list until total sum is prime
while true
if Prime.prime?(new_primes.inject(0, :+))
puts new_primes.inject(0, :+)
break
else
new_primes.delete_at(-1)
end
end
解決方法2:(出力= 958577)
require 'Prime'
# Initialising primes
N = 1_000_000
primes = {}
(2..N).each do |i|
primes[i] = true
end
i = 2
while i * i <= N
if primes[i]
j = i
while i * j <= N
primes[i * j] = false
j += 1
end
end
i += 1
end
sum = 0
max = 0
i = 2
while i < N
if primes[i]
sum += i
if sum < N && Prime.prime?(sum)
max = sum
end
end
i += 1
end
puts max
私はこのような明白な間違いのようです、ありがとう! –