完全数问题
【题目】如果一个数的所有真因子(不包含它自身的因子)之和恰等于其自身,则该数为完全数,也称为完美数(perfect number)。完全数有许多奇妙的性质。但它们很稀少,你来求前几个吧。最小的一个是 6,因为: 6 = 1 + 2 + 3
这个完全数的定义已经很清楚了,如果没有什么妙法,就地毯式搜索也可以。下法就是:
yin_zi :: Int -> [Int]
yin_zi n = [ x | x <- [1..n-1], n `mod` x == 0 ]
wan_quan :: [Int]
wan_quan = [ x | x <- [3..], (sum . yin_zi) x == x]
main = print $ take 3 wan_quan
列出前三个很容易,第4个就很慢了…