题目描述
如果一个整数只能被1和自己整除,就称这个数是素数。
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
如果一个数字既是素数也是回文数,就称这个数是回文素数
牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。
输入描述:
输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)
输出描述:
输出一个整数,表示区间内回文素数个数。
示例1
输入
100 150
输出
2
package com.qiye;
import java.util.Scanner;
import java.util.Stack;
public class PrimeAndCircleNum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
int y = scanner.nextInt();
int count = 0;
for(int i = x;i <=y;i ++){
boolean isPrime = false;
boolean isCircle = false;
isPrime = judgePrime(i);
isCircle = judgeCircle(i);
// System.out.println("现在的i是:" + i +" 它是素数吗? " + isPrime + " 它是回文数吗? " + isCircle);
if(isPrime && isCircle){
count++;
}
}
System.out.println(count);
}
public static boolean judgePrime(int num){
if(num < 2) return false;
if(num == 2) return true;
if(num % 2 == 0) return false;
for(int i=3;i*i <= num;i += 2){
if(num % i == 0){
return false;
}
}
return true;
}
public static boolean judgeCircle(int num){
String s = num + "";
char characters[] = s.toCharArray();
Stack<Character> stack = new Stack<>();
for(int i=0;i < characters.length;i ++){
stack.push(characters[i]);
}
String s1 = "";
while (!stack.isEmpty()){
s1 += stack.pop();
}
if(s1.equals(s)){
return true;
}
return false;
}
}
这题挺好的,两个基本算法的综合,回文数和素数判断。