Cette méthode prendra un Long
et renverra un LongStream
de nombres premiers pour n'importe quel chiffre passé à la méthode.Obtenir les facteurs premiers dans les flux Java fonctionnels avec une seule méthode?
factors.java
public LongStream factors(long x){
LongStream factorStream = LongStream.range(1, x+1).filter(n -> x%n == 0);
return factorStream;
}
En utilisant la méthode ci-dessus pour trouver des facteurs communs est d'abord ok.
primeFactors.java
public LongStream primeFactors(long x){
LongStream primeFactorStream = factors(x).filter(n -> factors(n).count() == 0);
//doesn't work as factors.java returns a LongStream, which might include non-prime factors, which will not equate to zero.
return primeFactorStream;
}
Je comprends cela devrait être facilement contournée par l'utilisation d'un simple, isPrime() méthode avec un prédicat, mais est-il un moyen de faire la même chose pour pour facteurs premiers mais seulement avec une seule méthode?
Vous pouvez éviter les chaînes en utilisant BigInteger.valueOf (n) –
@SchiduLuca intéressant, vos 3 dernières réponses sont sur les nombres premiers :) n'est-ce pas 'isProbablePrime', bien un * probable * prime? – Eugene
@Eugene dernière fois que j'ai foiré avec le paramètre '' certainty''. Si vous mettez '' 10'' alors il vous donnera une probabilité '' 99.99''. –