open integer //arbitrary sized integers decompose_prime n = loop n 2I where loop c p | c < (p * p) = [c] | c % p == 0I = p :: (loop (c / p) p) | else = loop c (p + 1I) decompose_prime 600851475143I