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

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

Barbara Streisand
Barbara Streisand原创
2025-01-13 21:47:47286浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn