haskell 的阶乘积
Product of factorial in haskell
我正在尝试将 Python 转换为 Haskell 但遇到困难。我是 Haskell 的新手,只知道基础知识。
这是我在 Haskell 中需要的 Python 代码。有人可以帮助我吗?
谢谢。
import sys
fact=[]
def facto():
mod=1000000007
f1=1;f2=1
for j in xrange(1,1000001):
f1=f1*j%mod
f2=f2*f1%mod
fact.append(f2)
def main():
facto()
tc=int(sys.stdin.readline())
for i in xrange(tc):
n=int(sys.stdin.readline())
sys.stdout.write("Case %d: "%(i+1))
print fact[n-1]
main()
这是使用 scanl
生成 "product of factorials" 列表的方法:
p = 1000000007 :: Int64
mtimes a b = mod (a * b) p
facts = scanl mtimes 1 [1..]
prodfacts = scanl mtimes 1 facts
注:
ghci> take 10 facts
[1,1,2,6,24,120,720,5040,40320,362880]
ghci> take 10 prodfacts
[1,1,1,2,12,288,34560,24883200,411327125,709563912]
我正在尝试将 Python 转换为 Haskell 但遇到困难。我是 Haskell 的新手,只知道基础知识。 这是我在 Haskell 中需要的 Python 代码。有人可以帮助我吗?
谢谢。
import sys
fact=[]
def facto():
mod=1000000007
f1=1;f2=1
for j in xrange(1,1000001):
f1=f1*j%mod
f2=f2*f1%mod
fact.append(f2)
def main():
facto()
tc=int(sys.stdin.readline())
for i in xrange(tc):
n=int(sys.stdin.readline())
sys.stdout.write("Case %d: "%(i+1))
print fact[n-1]
main()
这是使用 scanl
生成 "product of factorials" 列表的方法:
p = 1000000007 :: Int64
mtimes a b = mod (a * b) p
facts = scanl mtimes 1 [1..]
prodfacts = scanl mtimes 1 facts
注:
ghci> take 10 facts
[1,1,2,6,24,120,720,5040,40320,362880]
ghci> take 10 prodfacts
[1,1,1,2,12,288,34560,24883200,411327125,709563912]