Ich schreibe eine Methode, die erkennt, ob ein BigInteger Prime ist oder nicht. Ich habe den folgenden Code/Algorithmus verwendet, um zu überprüfen, ob eine gegebene Zahl prim ist oder nicht. Aber das ist extrem langsam und dauert lange, wenn eine Zahl beispielsweise 10 Ziffern lang ist.Schnellster Algorithmus, um herauszufinden, ob ein BigInteger eine Primzahl ist oder nicht?
public boolean returnPrime(BigInteger testNumber){
int divisorCounter=1;
BigInteger index,i ;
for (index= new BigInteger("2"); index.compareTo(testNumber) !=1; index=index.add(new BigInteger("1"))){
System.out.println(index);
for(i= new BigInteger("2"); i.compareTo(index) != 1; i=i.add(new BigInteger("1"))){
if((testNumber.mod(i).equals(BigInteger.ZERO))){
divisorCounter++;
}
if(divisorCounter>2){
return false;
}
}
}
return true;
}
Gibt es bessere Algorithmen für die Arbeit mit der BigInteger-Primzahl? Ich konnte in Stackoverflow keine diesbezügliche Frage finden. Wenn Sie auf eine solche Frage gestoßen sind, lassen Sie es mich bitte wissen oder wenn Sie eine Idee haben, wie Sie diese lösen können, dann werden Ihre Ideen sehr geschätzt.
Nach 2, müssen Sie nur ungerade Zahlen überprüfen. Sie können auch anhalten, nachdem Sie das sqrt (n) erreicht haben. –
also vor der zweiten Schleife prüfen, ob die Zahl ist Prime und es an die zweite Schleife übergeben? Das klingt gut, um Overhead zu reduzieren, weil ich alle geraden Zahlen eliminieren würde. – Ram
Auch und 'sqrt (n)' ist viel kleiner als 'n' –