最大の素数オイラー問題に取り組んでいます。最下位のforメソッドは、要素の配列を調べ、それらが素数であるかどうかをテストすることになっています。Ruby forメソッドは、配列上をスキップしているようです。
これは小さい番号でも機能しますが、テスト番号(600851475143)では素数ではない1つの要素(104441)がありますが、forメソッドはスキップしているようです。他の非素数が削除され、実際の素数が保持されます。しかし、この1つの番号は何らかの理由でスキップされます。
私はルビーが総理メソッドを持って知っていると私は、この問題を解決するために、より説得力の方法があることを確認しています。しかし、これは本当に私を悩ましています。私はあなたの助けに感謝します。ありがとうございました。
def make_array(num)
array = []
factors_array = []
prime_array = []
test_array = []
x = 1
while x <= Math.sqrt(num) #makes array of odd numbers below square root of number
array << x
x += 2
end
array.each do |x| #gets factors of number from array
next if num % x != 0
factors_array << x
end
prime_array = factors_array
puts "#{prime_array} before"
factors_array.each do |i| #gets prime factors from factors
for p in 2...i #checks if numbers are prime numbers
if i % p == 0
test_array << i
not_prime = i
prime_array.delete(not_prime)
end
end
end
puts "#{test_array} test array"
puts "largest prime factor is = #{prime_array.max}"
end
make_array(600851475143)
# answer is 104441, but it should be 6857
実際に何が起こっているのか、各ループが推奨と 'prime_array'は単にあなたがそうしている正確に何である' factors_array'への参照であるため、されていない内部 'Array'を変更するあなたはループの中にいくつかの数字をスキップしていることです。ループの後に 'factors_array'と' prime_array'で私のステートメントの外観を視覚化する(ヒント:それらは同じです)。多分試みる 'prime_array = factors_array.dup' – engineersmnky