这个素数相关谓词的瓶颈是什么?

2023-11-30

所以这里是:我正在尝试计算低于两百万的所有素数的总和(对于这个问题),但是我的程序非常慢。我确实知道该算法本身非常糟糕并且是一种蛮力算法,但对我来说它似乎比应有的速度要慢得多。
这里我将搜索限制为 20,000,这样结果就不会等待太久。
我不认为这个谓词很难理解,但无论如何我都会解释它:我计算 20,000 以下的所有素数的列表,然后对它们求和。求和部分很好,素数部分真的很慢。

problem_010(R) :-
    p010(3, [], Primes),
    sumlist([2|Primes], R).
p010(20001, Primes, Primes) :- !.
p010(Current, Primes, Result) :-
    (
        prime(Current, Primes)
    ->  append([Primes, [Current]], NewPrimes)
    ;   NewPrimes = Primes
    ),
    NewCurrent is Current + 2,
    p010(NewCurrent, NewPrimes, Result).
prime(_, []) :- !.
prime(N, [Prime|_Primes]) :- 0 is N mod Prime, !, fail.
prime(ToTest, [_|Primes]) :- prime(ToTest, Primes).

我想了解一下为什么它这么慢。是愚蠢的暴力算法的良好实现,还是有某种原因导致Prolog失败?

编辑:我已经发现了一些东西,通过附加新的素数而不是让它们出现在列表的开头,我的素数在开始时出现得更频繁,所以速度快了约 3 倍。但仍然需要一些洞察力:)


首先,Prolog 不会在这里失败。

有很多非常聪明的方法来生成素数。但作为一个便宜的开始,只需以相反的顺序累积素数即可! (7.9s -> 2.6s) 通过这种方式,较小的可以更快地进行测试。然后,考虑仅针对 141 以内的素数进行测试。更大的素数不能成为影响因素。

然后,您可以添加 3、5、7,而不是仅逐步遍历不能被 2 整除的数字。

有人就这个“问题”写论文。参见,例如这张纸,尽管对“真正的”算法到底是什么进行了有点复杂的讨论,22 世纪前,当算盘的最新版本被庆祝为萨拉米斯片.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个素数相关谓词的瓶颈是什么? 的相关文章

随机推荐

  • 您可以通过其中的符号对齐文本吗?

    我想显示这样的电子邮件地址列表 email protected email protected email protected email protected email protected hinxterpexterp email pro
  • VBA在循环期间在数组中存储多列然后返回值

    我有一个宏 它将用户定义的函数 代码中的 R ajseasonX13 应用于工作表 NSA 中的多个列 然后返回工作表 SA 中的值 问题是我的代码一次仅将该函数应用于一个列 一旦 VBA 不断在选项卡 NSA 和 SA 之间来回移动 结果
  • 如何在 Spring config.xml 中配置 Cron 时区?

    我有一个带有 Cron 任务的 Spring 配置 xml 文件 该任务在我的机器上定期执行 如何在 xml 文件中配置此任务以使用莫斯科时区 与我的时区不同
  • 更改浏览器缩放级别

    我需要在我的网站上创建 2 个按钮来更改浏览器缩放级别 由于图像大小和布局问题 我请求浏览器缩放而不是 css 缩放 嗯 这可能吗 我听到了相互矛盾的报道 尽管在 Firefox 中不起作用 但在 IE 和 chrome 中可以使用 img
  • sci-kit learn:使用 X.reshape(-1, 1) 重塑数据

    我正在训练一个用于文本分类的 python 2 7 11 分类器 在运行时我收到一条已弃用的警告消息 表明我不知道代码中的哪一行导致了它 错误 警告 但是 代码运行良好并给了我结果 AppData Local Enthought Canop
  • Haskell Esqueleto 将列子集投影到自定义记录列表

    在所有的例子中我都看到了结果埃斯克莱托被投影到元组列表中或实体记录 例如 previousLogItems lt select from li gt do orderBy desc li LogItemId limit 10 return
  • 在我的 iOS 应用程序中使用 IOKit 会导致我的应用程序被拒绝吗?

    开发人员 正如提到的EricaIOKit是一个半私有框架 有人有在应用程序商店应用程序中使用它的经验吗 我想用它来获取 IMEI 和 ICCID 号码 如果您调用任何未记录的 Apple 框架 您的应用程序将被拒绝 因此 人们不太可能有在应
  • 如何处理 IE 8 中缺少 JavaScript Object.bind() 方法

    我正在编写一些 JavaScript 它使用Object bind method funcabc function x y z this myx x this playUB function w if this myx null do bl
  • 有谁知道协议缓冲区的 Ada 插件吗?

    我正在寻找用于协议缓冲区的 Ada 插件 看起来除了 Ada 之外 几乎所有语言插件都可用或正在开发中 嗯 我唯一发现的是这篇论文 不幸的是 我没有找到任何翻译工具的源代码 即你所说的plugin 我唯一能告诉的是该工具是用 C 开发的 U
  • 将向量的向量打印到 ostream

    请考虑以下代码 我正在尝试将向量的向量输出到 ostream include
  • 如何从任何字符串网址获取网站名称[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我已经给出了包含任何有效 url 的字符串 我必须从给定的网址中找到网站的名称 我也忽略了子域 like http www yahoo com gt yahoo www google
  • 向多个图层组添加标记

    我使用 StyledLayerControl 和 markcluster 使用 leafletjs 创建了一张地图 https www wiva at v2 basemap kartentest 每个标记代表一个适合一个类别 图层组 的研究
  • 根据身体负荷向下滑动一个 div

    如何让 div 在页面加载时隐藏 然后在页面加载后向下滑动 我不想使用 CSSdisplay none 尝试一下这个小提琴 http jsfiddle net ahr3U 这基本上使用 CSS3 设置过渡的所有参数 过渡属性使动画成为可能
  • jshn - 如何解析 json 包

    我想知道如何在openwrt上轻松解析json 我有 jhsn 来解析 json 这是我的程序 sh 脚本 download weather wget api openweathermap org data 2 5 weather id 2
  • 在派生类中调用 super() 时,可以传入 self.__class__ 吗? [复制]

    这个问题在这里已经有答案了 我最近发现 通过 StackOverflow 要调用基类中的方法 我应该调用 super derived class self base class method 很好 它有效 但是 我发现自己在进行更改时经常在
  • 使用加密后在终结器线程中获取“ReleaseHandleFailed”MDA

    运行此代码后我得到了 MDA第二次在一个循环中 使用不同的file范围 byte encryptedData File ReadAllBytes file before this line it throws see exception b
  • .on("click") 在 iOS 上不起作用

    我注意到 body on click id function event 不适用于 iOS 而 id on click function event 工作完美 相同的站点 相同的 jQuery 最新 相同的 DOM 我不能使用后者 因为 i
  • Paypal Ipn 与 asp.net MVC 集成

    HomeControler Index cshtml页面如下 div div
  • 无法创建适合文本大小的 HTML Div 元素

    我无法让 div 适合其内部文本的大小 我有 2 个 div 我希望内部 div 能够 1 适合外部 div 内部 2 位于包装 div 内的中心 我遇到的问题是 当我调整视图的宽度时 文本和 div 边框之间出现了很大的不必要的间隙 如下
  • 这个素数相关谓词的瓶颈是什么?

    所以这里是 我正在尝试计算低于两百万的所有素数的总和 对于这个问题 但是我的程序非常慢 我确实知道该算法本身非常糟糕并且是一种蛮力算法 但对我来说它似乎比应有的速度要慢得多 这里我将搜索限制为 20 000 这样结果就不会等待太久 我不认为