调试有故障的素数检测器
旨在识别由 long 变量定义的范围内的素数的程序无法产生任何输出。 对代码的分析揭示了两个严重缺陷:
prime_num()
函数内的内部循环包含有缺陷的条件 (i
),导致无限循环。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中文网其他相关文章!