タスク:13195のプロジェクトオイラー#3ルビー
素因数ある5、7、13、29 番号600851475143の最大の素因数は何ですか?
正解は6857
です。
マイコード:上記の場合
def prime?(n)
(2..(n-1)).each { |x| false if n % x == 0 }
true
end
x = 2
prime_factor_arr = []
number = 600_851_475_143
while x < number
if number % x == 0 && prime?(x)
prime_factor_arr << x
number = number/x
end
x += 1
end
puts prime_factor_arr.last
puts prime?(prime_factor_arr.last)
puts prime_factor_arr
、私は最大の素数として1471
を取得します。コードを次のように変更した場合:最後に印刷された配列は以下のとおりです。
[71, 839, 1471, 6857, 59569, 104441, 486847]
私のコードが動作しない理由が私には明確ではありません。誰も助けてくれますか?
あなたの 'プライム 'は_all_の数値に対して' true'を返すと思いますか? –
ルビーエキスパートではありませんが、 'prime?'関数は常にtrueを返すようです。たとえば、486847はプライムではありません。 – Bort
感謝します! Ok。ちょうど 'false'の代わりに' return false'を追加しました。メソッドを終了したい場合は、 'return'を特にタイプする必要があることを正しく理解していますか? –