Rubyで素因数を求める 〜Rubyでオイラープロジェクトを解こう!Problem3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
13195の素因数は、5、7、13および29である。
では600851475143の最大の素因数はいくらか。
最小の素数から対象の数を割って
割り切れる素数を順次見つけ出す
def prime_factor(n) prime = 2 result = [] loop do break if n < prime while n.modulo(prime).zero? n = n / prime result << prime end prime = next_prime(prime) end result end def next_prime(prime) _next = prime + 1 loop do return _next if prime?(_next) _next += 1 end end def prime?(n) 2.upto(n-1) do |i| return false if n.modulo(i).zero? end true end primes = prime_factor(600851475143) # => [71, 839, 1471, 6857] primes.last # => 6857