为了好玩,我试着在Project Euler上做一些工作,但是现在我被困在一个问题上,想要继续前进,但似乎无法让我的函数工作。我试图计算给定整数的主因子。该功能适用于更小的数字,如13195:递归函数的空列表
> primeFactor 13195
[29,13,7,5]
但是当我运行一个较大的数字,如600851475143:
> primeFactor 601851475143
[]
这似乎很奇怪我。我知道Haskell是一个懒惰的语言,但我不认为它应该是偷懒......
primeFactor' :: Int -> [Int]
primeFactor' n = [ p | p <- primes' [] [2 .. n], n `mod` p == 0 ]
where primes' :: [Int] -> [Int] -> [Int]
primes' ys [] = ys
primes' ys (x:xs) | x `notMultipleOf` ys = primes' (x:ys) xs
| otherwise = primes' ys xs
-- helper function to primeFactor'
notMultipleOf :: Int -> [Int] -> Bool
notMultipleOf n [] = True
notMultipleOf n xs = and [n `mod` x /= 0 | x <- xs]