【发布时间】:2016-03-24 16:34:31
【问题描述】:
我想找出所有除以 10 的 2 的幂的列表!它显示异常,即除以零
[2^i | i<-[1..],(factorial(10) `mod` (2^i))==0]
完整的问题是获得函数 maximum_Power 使得 maximum_Power :: Int -> Int -> Int 最大功率 n p 是 p 除以 n 的最大幂! (n的阶乘)
我试着做这个
largest_Power :: Int->Int->Int
largest_Power 0 _ =1
largest_Power _ 0 =1
largest_Power n p = floor (logBase (fromIntegral p) (fromIntegral (last([p^i | i<-[1..],(factorial(n) `mod` (p^i))==0]))))
factorial::Int->Int
factorial 0=1
factorial 1=1
factorial x=x*factorial(x-1)
现在当我为最大功率 10 2 运行这个时,我遇到了异常。
【问题讨论】:
-
你对
factorial的定义是什么? (就此而言,尚不清楚您为什么要使用factorial,或者您的实际问题是什么。只有 1、2、4 和 8 有机会除以 10,而实际上只有 2。)如果您想要能被 10 整除的 2 的幂,没有; 10 = 2 * 5,2 的幂不能被 5 整除。 -
我同意@chepner 所说的一切,并想补充一点,如果您确实填写了一个阶乘函数并运行它,甚至不会出现除以零错误......跨度>
-
该错误很可能是因为您使用
Int而不是Integer来定义您的factorial或者您在某处有Int类型注释 -
这应该得到你的名单
let m = product [1..10] in filter (\n -> m `mod` n == 0) $ takeWhile (<= m) [2^i | i <- [1..]]- 应该给你[2,4,8,16,32,64,128,256] -
当然,只要稍微算一下就很容易了:10! = 1*2*3*...*10 - 你想在那里收集所有 prim-factor 2 - 它是 2,2*2,2*3,2*2*2,2*5 - 所以你可以取 1 到 8 个 2`s 正好是 [2^1,...,2^8] 这就是脚本给你的结果