LeetCode 866. Prime Palindrome

866. Prime Palindrome(回文素数)

题目:

  求出大于或等于 N 的最小回文素数。

  回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数

  例如,2,3,5,7,11 以及 13 是素数。

  回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。

  例如,12321 是回文数。

 

思路:

 

  思路还是挺清晰的,从给入数字向上检索,如果既是回文数,又是素数,就直接输出,如果不满足条件,那么就增加数字,继续判断。

  这里有一个小问题,就是所有偶数位的回文数,都可以被11整除,至于证明。。。。。咱也不知道,咱也不敢问,所有如果发现这个数是偶数位,那么直接进一位,首数字和尾数字全为1,继续判断。

 

代码:

 

 1     public static int primePalindrome(int N) 
 2     {
 3         if (N <= 2) 
 4             return 2;
 5         else if(N <= 3)
 6             return 3;
 7         else if(N <= 5)
 8             return 5;
 9         else if(N <= 7)
10             return 7;
11         else if(N <= 11)
12             return 11;
13         
14         for (int i = N; ; ) 
15         {
16             if(isHui(i) && isPrime(i))
17                 return i;
18             
19             if((i + "").length() % 2 == 0)
20                 i = (int)(Math.pow(10, (i + "").length()) + 1);           
21             else
22                 i++;
23             
24         }
25     }
26     
27     public static boolean isPrime(int i)
28     {
29         for (int j = 2; j <= Math.sqrt(i); j++)
30             if (i % j == 0) 
31                 return false;
32         return true;
33     }
34     
35     public static boolean isHui(int s)
36     {
37         String str = s+"";
38         int len = str.length();
39         for (int j = 0; j < len/2; j++) 
40             if (str.charAt(j) != str.charAt(len-j-1)) 
41                 return false;
42         return true;
43     }
View Code

 

posted @ 2019-05-20 17:15  cheng102e  阅读(375)  评论(0编辑  收藏  举报