求出大于或等于 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。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/prime-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案也来源于Leecode的官方题解思路中的暴力法:
从N开始判断是不是同时满足回文,素数两个条件。
判断回文就字节数字反转,判断等不等;
判断n是不是素数,2之外的偶数都不是素数,可以跳过,素数的判断是检查 从2开始直到根号n之间,有没有他能整除的数,有则不是素数。
class Solution {
// 遍历所有数字,检查是不是回文串。如果是,检查是不是素数,如果当前数字长度为 8,可以跳过检查,因为不存在 8 长度的素数。
public int primePalindrome(int N) {
boolean a = true;
while(a){
if (10_000_000 < N && N < 100_000_000)
N = 100_000_000;
a = !(isSushu(N)&&isHuiwen(N));
if(a ){
N++;
}
}
return N;
}
public boolean isSushu(int a){
if(a<2){
return false;
}
if(a%2==0 && a!=2){
return false;
}
for (int i = 2; i <= Math.sqrt(a); i++) {
if(a%i==0){
return false;
}
}
return true;
}
public boolean isHuiwen(int a){
int res2 = a;
int res = 0;
while(a>0){
res = res*10 + a%10;
a = a/10;
}
return res2==res;
}
}