/* 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();
}
}
[Java] Prime Palindromes
最新推荐文章于 2022-01-13 18:02:25 发布