Project Euler Problem3
Juliaを使いました
ある数nが合成数ならば、nの最大の素因数 = (n / (nの最小の素因数)) の最大の素因数 であることを使いました。
例 13195の最大の素因数=(13195/5)の最大の素因数
function find_divisor(n, d) if d * d > n n elseif n % d == 0 d else find_divisor(n, d + 1) end end function smallest_prime_factor(n) find_divisor(n, 2) end function largest_prime_factor(n) spf = smallest_prime_factor(n) if n == spf n else largest_prime_factor(n / spf) end end println(largest_prime_factor(600851475143))
Haskellでの方法
smallest_prime_factor :: Integer -> Integer smallest_prime_factor n = head $ filter ((==0) . (mod n)) [2..] largest_prime_factor :: Integer -> Integer largest_prime_factor n | n == spf = n | otherwise = largest_prime_factor (div n spf) where spf = smallest_prime_factor n