Mat*_*ins 3 haskell function list
k-复合数是具有除了1和其自身之外的k个因子的复合数.我正在尝试编写将采用整数k的代码并返回所有k-composite的无限列表.所以使用take 5 $ kcomposite 2将返回[6,8,10,14,15].我写了两个函数来完成这个:
factors :: Int -> [Int]
factors n = [x | x <- [1..n], n `mod` x == 0]
kcomposite :: Int -> [Int]
kcomposite n = [x | x <- [1..], (length (factors n)) == (x-2)]
Run Code Online (Sandbox Code Playgroud)
我编译没有问题,但是当我尝试运行它们时,ghci永远不会停止运行.这是有道理的,因为无限列表,但即使我只尝试获取列表中的前几个元素,就像在上面的例子中一样.我无法理解我做错了什么.
k-复合数是具有除了1和其自身之外的k个因子的复合数
由于您的factors函数返回数字的所有因子(包括1它自身),因此该数字将大于提供的数字k.这就是为什么你需要比较k + 2而不是k - 2
此外,当k小于0你仍然会让程序永远不会停止运行时,这就是你可能想要处理这个边缘情况的原因.
factors :: Int -> [Int]
factors n = [x | x <- [1..n], n `mod` x == 0]
kcomposite :: Int -> [Int]
kcomposite k
| k < 0 = []
| otherwise = [x | x <- [1..], length (factors x) == (k + 2)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |