求出大于或等于 N
的最小回文素数。
回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。
例如,2,3,5,7,11 以及 13 是素数。
回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。
例如,12321 是回文数。
示例 1:
输入:6 输出:7
示例 2:
输入:8 输出:11
示例 3:
输入:13 输出:101
提示:
1 <= N <= 10^8
- 答案肯定存在,且小于
2 * 10^8
。
1 import java.util.Scanner; 2 3 class Solution2 { 4 5 public boolean isPrime(int number) { 6 for (int i = 2; i <= Math.sqrt(number); i++) { 7 if (number % i == 0) { 8 return false; 9 } 10 } 11 return true; 12 } 13 14 public boolean isPalindrome(int[] number, int len) { 15 for (int j = 0; j < len / 2; j++) 16 if (number[j] != number[len - j - 1]) return false; 17 return true; 18 } 19 20 public int primePalindrome(int number) { 21 if (number <= 2) return 2; 22 number = number % 2 == 0 ? number + 1 : number; 23 for (int i = number; ; ) { 24 int k = i, len = 0; 25 int[] nums = new int[10]; 26 while (k / 10 != 0) { 27 nums[len++] = k % 10; 28 k /= 10; 29 } 30 nums[len++] = k; 31 if (len % 2 == 0 && i != 11) 32 i = (int) Math.pow(10, len) + 1; 33 else { 34 if (isPalindrome(nums, len)) 35 if (isPrime(i)) return i; 36 i += 2; 37 } 38 } 39 40 } 41 } 42 43 public class PrimePalindrome { 44 public static void main(String[] args) { 45 Scanner scan = new Scanner(System.in); 46 int read = scan.nextInt(); 47 Solution2 sol = new Solution2(); 48 System.out.println(sol.primePalindrome(read)); 49 } 50 }