我一直在尝试解决一个需要 Sigma 表示法(或者至少我认为)的问题,但是我遇到的 Haskell 中 Sigma 表示法的每个实现都没有在其函数中使用索引变量。我一直试图复制的特定公式是:
它用于计算 n! 中尾随零的数量,但我得到的最好的是:
sigma :: (Enum a, Num b) => a -> a -> (a -> b) -> b
sigma i k fn = sum . map fn $ [i..k]
zeros :: Int -> Int
zeros n = sigma 1 n (???)
我也在尝试创建一个通用的 sigma 函数,它与 f 中的索引变量一起使用。这有效,但对于 100!,它会给出 -11 个尾随零。溢出?
zeros :: Int -> Int
zeros n = sigma 1 n (\i -> n `div` 5 ^ i)
where sigma i k fn = sum $ map fn [i..k]
PS 我在限制编译时间的浏览器内 IDE 上。(所以速度很重要)