55 lines
1.2 KiB
Java
55 lines
1.2 KiB
Java
public class Emirp{
|
|
|
|
//trivial prime algorithm, sub in whatever algorithm you want
|
|
public static boolean isPrime(long x){
|
|
if(x < 2) return false;
|
|
if(x == 2) return true;
|
|
if((x & 1) == 0) return false;
|
|
|
|
for(long i = 3; i <= Math.sqrt(x);i+=2){
|
|
if(x % i == 0) return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static boolean isEmirp(long x){
|
|
String xString = Long.toString(x);
|
|
if(xString.length() == 1) return false;
|
|
if(xString.matches("[24568].*") || xString.matches(".*[24568]")) return false; //eliminate some easy rejects
|
|
long xR = Long.parseLong(new StringBuilder(xString).reverse().toString());
|
|
if(xR == x) return false;
|
|
return isPrime(x) && isPrime(xR);
|
|
}
|
|
|
|
public static void main(String[] args){
|
|
int count = 0;
|
|
long x = 1;
|
|
|
|
System.out.println("First 20 emirps:");
|
|
while(count < 20){
|
|
if(isEmirp(x)){
|
|
count++;
|
|
System.out.print(x + " ");
|
|
}
|
|
x++;
|
|
}
|
|
|
|
System.out.println("\nEmirps between 7700 and 8000:");
|
|
for(x = 7700; x <= 8000; x++){
|
|
if(isEmirp(x)){
|
|
System.out.print(x +" ");
|
|
}
|
|
}
|
|
|
|
System.out.println("\n10,000th emirp:");
|
|
for(x = 1, count = 0;count < 10000; x++){
|
|
if(isEmirp(x)){
|
|
count++;
|
|
}
|
|
}
|
|
//--x to fix the last increment from the loop
|
|
System.out.println(--x);
|
|
}
|
|
}
|