首页 > 后端开发 > C++ > 为什么我的素数检测程序失败,如何修复?

为什么我的素数检测程序失败,如何修复?

Barbara Streisand
发布: 2025-01-13 21:47:47
原创
324 人浏览过

Why Does My Prime Number Detection Program Fail, and How Can I Fix It?

调试有故障的素数检测器

旨在识别由 long 变量定义的范围内的素数的程序无法产生任何输出。 对代码的分析揭示了两个严重缺陷:

  • 无限循环: prime_num() 函数内的内部循环包含有缺陷的条件 (i),导致无限循环。
  • 有缺陷的素数逻辑:素数检查不正确。质数只能被 1 和它本身整除。条件 if (i != j && i % j == 0) 错误地将带有附加约数的数字分类为素数。

增强的素数查找算法

更有效的解决方案采用“试分筛”方法:

<code class="language-csharp">Enumerable.Range(0, Math.Floor(2.52*Math.Sqrt(num)/Math.Log(num))).Aggregate(
    Enumerable.Range(2, num-1).ToList(), 
    (result, index) => { 
        var bp = result[index]; var sqr = bp * bp;
        result.RemoveAll(i => i >= sqr && i % bp == 0); 
        return result; 
    }
);</code>
登录后复制

这种改进的算法使用近似值来最小化测试的主要候选者的数量,从而显着提高性能。

以上是为什么我的素数检测程序失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板