首頁 > 後端開發 > C++ > 為什麼我的素數檢測程序失敗,如何修復?

為什麼我的素數檢測程序失敗,如何修復?

Barbara Streisand
發布: 2025-01-13 21:47:47
原創
286 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板