김현이

[Java] 使用 Stream 惰性地查找質數

  • 撰写语言: 韓国語
  • 基准国家: 所有国家country-flag
  • 信息技术

撰写: 2024-07-23

撰写: 2024-07-23 19:39

通常,為了確認 n 是否為質數,會從 2 到 n - 1,依序檢查 n 是否能被這些數整除。

在此方法中,我們可以應用一些最佳化技巧來提高效率,並使用 Stream 來實現延遲求值。


天真的方法

以下是一個檢查 n 是否為質數的天真方法。

改進事項

  • 如果 n 可以表示為 a x b,假設 a > b 並不影響一般性。
    也就是說,我們只需要檢查到 sqrt(n) 即可。由於 sqrt() 運算代價較高,因此可以用 i * i <= n 的條件來替代。
  • 5 以上的質數都具有 6k ± 1 的形式。因此,我們可以讓 i 以 6 為增量進行檢查,從而減少檢查次數。

改進後的方法


使用 Stream 實現延遲求值

Java 中的 Stream 與 List 不同,它不會在定義運算時立即執行。

它會以定義好的計算每個元素的方式等待,直到需要特定元素時,才會執行計算該元素所需的運算。

利用這個特性,我們可以建立一個產生質數的 Stream,如下所示。

執行結果

完整程式碼

執行結果

[Java] 使用 Stream 惰性地查找質數




评论0