如何创建一种特殊的列表?

时间:2019-10-17 19:27:01

标签: haskell

我必须在Haskell中创建一种特殊的列表。首先,我必须创建一个函数,无论数量是否足够。 大量的数字是在将数字的除数相加时得出的结果大于原始数字的两倍,例如对于

12-> 1,2,3,4,6,12 > 24

我有此解决方案:

 abundant n =  sum[x | x <- [1..(n-1)], n `rem` x == 0]+n> 2*n

现在我应该创建一个列表,向您显示一定数量的大量数字,该怎么办?

2 个答案:

答案 0 :(得分:3)

我喜欢鼓励人们思考一些事情,但是这件事没有太多。

filter abundant [1..]

这将为您提供无数的大量数字。您可以从中take获得一个有限列表。

答案 1 :(得分:2)

相同的答案,但使用列表理解的符号:

[x | x <- [1..], abundant x]

示例:

take 10 ([x | x <- [1..], abundant x])
  

出场:[12,18,20,24,30,36,40,42,48,54]

根据评论的要求,以下是全部功能:

abundantnr i = take i ([x | x <- [1..], abundant x])
                 where abundant n = sum[x | x <- [1..(n-1)], n `rem` x == 0]+n> 2*n

用法:

abundantnr 10
  

出场:[12,18,20,24,30,36,40,42,48,54]