[Java] Prime Palindromes

/* Use the slash-star style comments or the system won't see your
   identification information */
/*
ID: lincans1
LANG: JAVA
TASK: pprime
*/
import java.io.*;
import java.util.*;

public class pprime {
    
    

	private boolean isPrime(int num) {
    
    
		for (int i = 2, n = (int)Math.sqrt(num); i <= n; i++) {
    
    
			if (num % i == 0) {
    
    
				return false;
			}
		}
		return true;
	}

	private void count(int a, int b, PrintWriter out) {
    
    
		// 1 bits
	    for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
	    	int palindrome = d1;
	    	if (palindrome < a) {
    
    
	    		continue;
	    	}
	    	if (palindrome > b) {
    
    
	    		return;
	    	}
	    	if (isPrime(palindrome)) {
    
    
	    		out.println(palindrome);
	    	}
	    }
	    
	    // 2 bits
	    for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
	    	int palindrome = d1 * 10 + d1;
	    	if (palindrome < a) {
    
    
	    		continue;
	    	}
	    	if (palindrome > b) {
    
    
	    		return;
	    	}
	    	if (isPrime(palindrome)) {
    
    
	    		out.println(palindrome);
	    	}
	    }

	    // 3 bits
	    for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				int palindrome = 100 * d1 + 10 * d2 + d1;
				if (palindrome < a) {
    
    
					continue;
				}
				if (palindrome > b) {
    
    
					return;
				}
				if (isPrime(palindrome)) {
    
    
					out.println(palindrome);
				}
			}
	    }
	    
	    // 4 bits
		for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				int palindrome = 1000 * d1 + 100 * d2 + 10 * d2 + d1;
				if (palindrome < a) {
    
    
					continue;
				}
				if (palindrome > b) {
    
    
					return;
				}
				if (isPrime(palindrome)) {
    
    
					out.println(palindrome);
				}
			}
	    }
		
	    // 5 bits
		for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				for (int d3 = 0; d3 <= 9; d3++) {
    
    
					int palindrome = 10_000*d1 + 1000*d2 + 100*d3 + 10*d2 + d1;
					if (palindrome < a) {
    
    
						continue;
					}
					if (palindrome > b) {
    
    
						return;
					}
					if (isPrime(palindrome)) {
    
    
						out.println(palindrome);
					}
				}
			}
		}
		
		// 6 bits
		for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				for (int d3 = 0; d3 <= 9; d3++) {
    
    
					int palindrome = 100_000*d1 + 10_000*d2 + 1000*d3 + 100*d3 + 10*d2 + d1;
					if (palindrome < a) {
    
    
						continue;
					}
					if (palindrome > b) {
    
    
						return;
					}
					if (isPrime(palindrome)) {
    
    
						out.println(palindrome);
					}
				}
			}
		}

		// 7 bits
		for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				for (int d3 = 0; d3 <= 9; d3++) {
    
    
					for (int d4 = 0; d4 <= 9; d4++) {
    
    
						int palindrome = 1000_000*d1 + 100_000*d2 + 10_000*d3 + 1000*d4 + 100*d3 + 10*d2 + d1;
						if (palindrome < a) {
    
    
							continue;
						}
						if (palindrome > b) {
    
    
							return;
						}
						if (isPrime(palindrome)) {
    
    
							out.println(palindrome);
						}
					}
					
				}
			}
		}

		// 8 bits
		for (int d1 = 1; d1 <= 9; d1 += 2) {
    
    
			for (int d2 = 0; d2 <= 9; d2++) {
    
    
				for (int d3 = 0; d3 <= 9; d3++) {
    
    
					for (int d4 = 0; d4 <= 9; d4++) {
    
    
						int palindrome = 10_000_000*d1 + 1000_000*d2 + 100_000*d3 + 10_000*d4 + 1000*d4 + 100*d3 + 10*d2 + d1;
						if (palindrome < a) {
    
    
							continue;
						}
						if (palindrome > b) {
    
    
							return;
						}
						if (isPrime(palindrome)) {
    
    
							out.println(palindrome);
						}
					}
					
				}
			}
		}
	}

	public pprime() throws IOException {
    
    
		// Use BufferedReader rather than RandomAccessFile; it's much faster
		BufferedReader f = new BufferedReader(new FileReader("pprime.in"));
		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("pprime.out")));

		// Use StringTokenizer vs. readLine/split -- lots faster
		StringTokenizer st = new StringTokenizer(f.readLine());

	    int a = Integer.parseInt(st.nextToken());
	    int b = Integer.parseInt(st.nextToken());
	    count(a, b, out);
	    out.close();
	    f.close();
	}
	
	public static void main (String [] args) throws IOException {
    
    
		new pprime();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41714373/article/details/112426418