Sto scrivendo un metodo che rileva se un BigInteger è primo o no. Ho usato il seguente codice/algoritmo per verificare se un dato numero è primo o meno. Ma questo è estremamente lento e richiede molto tempo se un numero indica dieci cifre.Algoritmo più veloce per scoprire se un BigInteger è un numero primo o no?
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;
}
C'è qualche algoritmo migliore per lavorare con il numero primo di BigInteger? Non sono riuscito a trovare una domanda relativa a questo in StackOverflow. Se hai trovato questa domanda per favore fammelo sapere o se hai un'idea su come risolvere allora le tue idee sono molto apprezzate.
Dopo 2, avete solo bisogno di controllare i numeri dispari. Inoltre puoi fermarti dopo aver raggiunto la sqrt (n). –
quindi prima che il secondo ciclo verifichi se il numero è primo e lo passa al secondo ciclo? Suona bene per ridurre il sovraccarico perché vorrei eliminare tutti i numeri pari. – Ram
Inoltre 'sqrt (n)' è molto più piccolo di 'n' –