完全数

http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exerciseに書いた問題の検証用。

完全数かどうかを判定するプログラムを書け。

完全数(perfect number)とは、その数字自身を除く約数(divisor)の和が、その数字自身になる数字のこと。

例:

  • 6 = 1+2+3
  • 28 = 1+2+4+7+14
  • 496 = 1+2+4+8+16+31+62+124+248
divisor n = filter (\x-> n `mod` x == 0) [1..n]
perfect n = (n*2) == (sum $ divisor n)

約数は半分調べるだけで十分、とか言うなっ。いいじゃん、496の約数がなんなのか調べたかっただけなんだからさ。