回文素数

 

求出大于或等于 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 }

 

posted @ 2018-08-25 15:52  sigmod  阅读(924)  评论(0编辑  收藏  举报