調試故障的素數檢測器
旨在識別由 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中文網其他相關文章!