Will modify the previous code soon. For now optimising the primality check.
private static boolean isPrime(long l) {
// Each prime number can be expressed as 6x+1 or 6x-1 except 2 and 3. Eliminate them.
if(l<4){
return true;
}
if(l%2==0 || l%3==0){
return false;
}
// Best way to shorten the search is to navigate upto the sqrt of the number.
long sqrt = (long)Math.sqrt(l);
// That's right. We are incrementing the loop by 6 with 2 and 3 eliminated.
for(long num = 6 ; num<=sqrt; num+=6) {
if(l % (num-1) == 0 || (l%(num+1)==0)) { //Possible primes: 6x+1 and 6x-1
return false;
}
}
return true;
}