Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python haskell中阶乘的乘积_Python_Haskell - Fatal编程技术网

Python haskell中阶乘的乘积

Python haskell中阶乘的乘积,python,haskell,Python,Haskell,我正在尝试将Python转换为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 m

我正在尝试将Python转换为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
生成“阶乘乘积”列表的方法:

p = 1000000007 :: Int64
mtimes a b = mod (a * b) p
facts = scanl mtimes 1 [1..]
prodfacts = scanl mtimes 1 facts
注:


你能告诉我们你在哈斯凯尔做过什么吗?更具体地说,你在哪里遇到了麻烦,你遇到了什么错误,等等。我在谷歌上搜索并找到了haskell教程,其中一些内置函数是mnation factorial
n=product[1..n]
mod`100000007',但这需要更多的时间。这就是我在这里寻求帮助的原因。@JustinWood我在谷歌上搜索并找到了haskell教程,其中一些内置函数是metion factorial
n=product[1..n]mod 100000007
,但这需要更多的时间。这就是我在这里寻求帮助的原因。现在还不清楚你在问什么。听起来你只是要求我们为你写代码。这不是本网站的重点。这个问题似乎离题了,因为它要求编写一个完整的程序。我要更明确一点:
p=1000000007::Int64
,因为在32位平台上,由于整数溢出,您会得到错误的结果。Haskell中的数字默认类型是
整数
,因此,添加
::Int64
会导致溢出,而不是阻止它们。我们正在执行算术mod 10^9+7,所以我们只需要一个Int64。
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]