【发布时间】:2018-09-06 04:10:18
【问题描述】:
我想生成无限质数,但在某些情况下它会在没有完成无限列表的情况下停止
这是我的尝试:
Primeach :: [Int]
Primeach = [n | n <- [2..] , product [1..n-1] `rem` n == n-1]
【问题讨论】:
-
请发布您正在使用的实际代码。您提供的代码至少有一个语法错误,不可能产生一个素数,更不用说其中的 34 个了。此外,如果您正在讨论性能,请包括您编译和/或运行代码的方式。
-
另外,35 不是素数,所以你应该考虑一下这个算法以及为什么它会产生 35...然后修复算法。
-
@ThomasM.DuBuisson 如果您忽略明显的大写错误,它实际上效果很好。
-
@IgnatInsarov 哦,我很清楚这个修复,但它证明提供的代码不是提问者运行的代码。复制和粘贴代码可以为所有潜在的回答者节省大量时间并消除很多困惑。最好不要在没有明确问题的情况下开始回答。
-
@WillemVanOnsem Actually 是正确的(因为Wilson's theorem)。但问题是因为他使用
Ints 并且产品溢出超过一定数量(对于 64 位系统,它在 n=22 处溢出)。试图制定一个答案来清楚地解释它。