RosettaCodeData/Task/Emirp-primes/Java/emirp-primes.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);
}
}