Un metodo molto veloce di Rifiutare un primato di prova consiste nell'utilizzare il fatto che tutti i numeri primi sono nella forma 6k +/- 1, dove k è un numero intero positivo. (2 e 3 escluso).
Questo significa che puoi rifiutare un numero con solo due test (più il banale).
public static boolean checkPrime(long p)
{
if (p==2 || p==3) return true;
if ( (p+1) % 6 == 0 || (p-1) % 6 == 0 )
{
// p might be prime, worth checking
return checkProbablePrime(p);
}
else
{
// p is not prime.
return false;
}
}
Indipendentemente dal fatto che questa sia una buona tecnica dipende dalla distribuzione degli input. Se ti aspetti un'alta percentuale di numeri composti, allora questo è un modo rapido per eliminarli dalla contesa. Sarebbe bello eliminare il ramo triviale in alto (== 2, == 3) ma ciò dipende dal contesto degli input. Se il tuo obiettivo è quello di trovare i primi, allora dovresti saltare questo.