Primäre Faktoren in funktionalen Java-Streams mit einer einzigen Methode?

8

Diese Methode übernimmt Long und gibt LongStream der Primzahlen für jede an die Methode übergebene Zahl zurück.

faktoren.java

%Vor%

Die Verwendung der oben genannten Methode zum Auffinden gemeinsamer Faktoren ist ok .

primeFactors.java

%Vor%

Ich verstehe, dass dies leicht mit der Verwendung einer einfachen isPrime () -Methode mit einem Prädikat umgangen werden kann, aber gibt es eine Möglichkeit, dasselbe für Primfaktoren aber nur mit einer einzigen Methode?

    
Carrein 16.10.2017, 16:53
quelle

3 Antworten

3

Wenn Sie es in einer einzigen Methode ohne die Hilfe einer vorhandenen Test-für-Prime-Methode tun möchten, können Sie es wie

tun %Vor%

Sie können die Methode wie

testen %Vor% %Vor%

Es ist unnötig zu sagen, dass dies nicht der effizienteste Ansatz ist ...

    
Holger 17.10.2017, 07:57
quelle
2

Sie können die Methode BigInteger isProbablePrime() verwenden, um zu überprüfen, ob Ihre Faktoren prim sind:

%Vor%

Für primeFactors(26).forEach(System.out::println); gibt es 2 13 zurück.

    
Schidu Luca 16.10.2017 17:17
quelle
2

Ohne memoization und Verwendung von LongStream könnten Sie einige einfache Leistungsverbesserungen wie für einen Strom von Primfaktoren anwenden, die einen Strom von Zahlen bis zu x / 2 : %Vor%

Was für sehr großes x wichtig ist. Diese Lösung wiederholt jedoch den Test von x % n == 0 für jedes n in jedem von 2 Streams, was nach Memoisierung verlangt.

    
diginoise 16.10.2017 17:59
quelle