You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中如何为函数提供前51个素数的指定范围输入

Haskell代码修改方案

完全可以实现自动生成前51个素数输入的需求,无需手动逐一键入,修改后的代码如下:

-- 埃氏筛实现无穷素数序列
primes :: [Integer]
primes = sieve [2..]
  where sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0]

perfect_nums n = (2^(n-1)) * ((2^n) - 1)
-- 取前51个素数作为输入参数
fperfect_nums = [perfect_nums x | x <- take 51 primes]
main = print fperfect_nums

代码说明

  • 我们用经典的埃拉托斯特尼筛法实现了惰性求值的无穷素数序列primes,只会在需要时生成对应位置的素数,运行效率高
  • 用take 51 primes直接获取前51个从小到大的素数,完全替换原代码中手动输入的素数列表,运行结果和原代码完全一致
  • 如果后续需要调整使用的素数数量,仅需修改take后的数字即可,无需手动维护素数列表

补充说明:你当前使用的perfect_nums函数是欧几里得完全数公式,仅当参数n为梅森素数时输出结果才是完全数,如果你最终目标是生成完全数,可以将素数序列替换为梅森素数序列即可,上述方案已经完全满足你当前提出的自动生成前51个素数输入的需求。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:09:02