김현이

[Java] Priemgetallen bepalen met Stream op een Lazy manier

Aangemaakt: 2024-07-23

Aangemaakt: 2024-07-23 19:39

Meestal wordt gecontroleerd of n een priemgetal is door te controleren of n deelbaar is door getallen van 2 tot n - 1.

Laten we enkele optimalisaties toepassen op deze methode om deze efficiënter te maken en lazy evaluation toepassen met behulp van Stream.


Naïeve methode

Dit is een naïeve methode om te controleren of n een priemgetal is.

Verbeterpunten

  • Als n = a x b, dan kunnen we aannemen dat a > b zonder de algemeenheid te verliezen.
    Met andere woorden, we hoeven i alleen te controleren tot sqrt(n). De sqrt() bewerking is echter duur, dus we kunnen deze vervangen door de voorwaarde i * i <= n.
  • Priemgetallen groter dan 5 hebben de vorm 6k ± 1. Daarom kunnen we het aantal controles verminderen door i met 6 te verhogen.

Verbeterde methode


Lazy Evaluation toepassen met Stream

Java's Stream voert de bewerking niet onmiddellijk uit wanneer deze is gedefinieerd, in tegenstelling tot List.

Het wacht tot een bepaald element nodig is en voert dan alleen de bewerking uit die nodig is om dat element te verkrijgen, terwijl de manier waarop elk element wordt berekend gedefinieerd is.

Met behulp hiervan kunnen we een Stream maken die priemgetallen genereert, zoals hieronder weergegeven.

Uitvoerresultaat

Volledige code

Uitvoerresultaat

[Java] Priemgetallen bepalen met Stream op een Lazy manier




Reacties0