10000以下の完全数を求める
30分プログラム、その721。10000までの完全数をもとめる(Haskell)にインスパイアされました。
元々は、mixiにあった問題らしいです。
使い方
- perfects 10000; val it = [0,6,28,496,8128] : int list
ソースコード
fun id x = x; fun range n = List.tabulate (n,id); fun isFactor n m = n mod m = 0; fun factors n = List.filter (isFactor n) (List.tabulate (n div 2,fn n => n + 1)); fun sum xs = List.foldl (op +) 0 xs; fun isPerfect n = sum (factors n) = n; fun perfects n = List.filter isPerfect (List.tabulate (n,id));