これはプロジェクト オイラーのタスク #3 のネタバレです! 自分で解決したい場合は、読み続けないでください。
Project Euler のプログラムを作成して Haskell を学ぼうとしています。現時点では、番号 600851475143 の最大の素因数を要求するタスク #3 を解決しようとしています。
liste
これを行うには、この数の約数 (平方根まで) であるすべての数を含むリストを作成します。私の戦略は、これらの数の約数を数え、それらが素数かどうかを判断することです。
number = 600851475143
-- sn = sqrt number
sn = 775146
liste = [x | x <- [1..sn], (mod number x == 0)]
-- liste = [1,71,839,1471,6857,59569,104441,486847]
primelist :: Int -> [Int]
primelist z = [y | y <- [1..z], mod z y == 0]
main = print [primelist x | x <- liste]
ここに表示される結果は、 の要素の除数を持つ 8 つのリストを含むリストになりますliste
。代わりに、リスト
[[1],[1,3],[1,29],[1,3,29,87]]
印刷されます。
この振る舞いはどのように説明されるべきですか?