김현이

[Java] Streamを使って遅延評価で素数を取得する

作成: 2024-07-23

作成: 2024-07-23 19:39

一般的に、nが素数かどうかを確認するには、2からn - 1までnで割り切れるかどうかを検査します。

この方法でいくつかの最適化を適用して、より効率的に改善し、Streamを使用して遅延評価を適用してみましょう。


ナイーブな方法

以下は、nが素数かどうかを検査するナイーブな方法です。

改善点

  • n = a x bと表現する場合、a > bと仮定しても一般性を失いません。
    つまり、iはsqrt(n)まで検査すれば十分です。sqrt()演算はコストがかかるため、i * i <= n条件に置き換えることができます。
  • 5以上の素数は、6k ± 1の形をしています。そのため、iを6ずつ増分して検査することで、検査回数を減らすことができます。

改善された方法


Streamで遅延評価を適用する

JavaのStreamは、Listとは異なり、演算が定義されたときにすぐに演算を実行しません。

各要素をどのように計算するかを定義した状態で待機し、特定の要素が必要になったときに、その要素を取得するための演算のみを実行します。

これにより、次のように素数を取得するStreamを作成できます。

実行結果

全体のコード

実行結果

[Java] Streamを使って遅延評価で素数を取得する




コメント0