PracticalNumberの判定
30分プログラム、その751。Practical number - Wikipediaの判定をやってみました。
Practical Numberは定義がややこしいんですが、
- NがPractical Numberとは:
- N未満の数; 1,2,3,...,N-1が
- Nの約数の和で表現することができる
ということらしいです。
詳しくは、Practical number - Wikipediaを見たほうがいいと思います><。
使い方
1> practical:practical(12). true 2> practical:practical(11). false
ソースコード
-module(practical). -compile([export_all]). divisor(N)-> [ M || M <- lists:seq(1,N), N rem M =:= 0 ]. combination([]) -> [[]]; combination([H | Tl]) -> Xss = combination(Tl), Xss ++ lists:map(fun(Xs)-> [ H | Xs] end,Xss). nodup(Xs) -> sets:to_list(sets:from_list(Xs)). practical(N) -> lists:sort(nodup([ M || Xs <- combination(divisor(N)), M <- [ lists:sum(Xs) ], M < N ])) == lists:seq(0,N-1).