题目描述
求出大于或等于 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
。
解题思路
数学不行。。。。除11外偶数位回文数,都能被11整除
bool prime(int N){
int t = sqrt(N);
for(int i=2;i<=t;i++){
if(N % i == 0) return false;
}
return true;
}
bool huiwen(string str){
string rstr = str;
reverse(rstr.begin(),rstr.end());
return (str == rstr);
}
int primePalindrome(int N) {
if(N == 1 || N == 2) return 2;
int tmp = N;
while(tmp){
string str = to_string(tmp);
if(huiwen(str) && prime(tmp)) return tmp;
if(tmp>=11 && str.length()%2 == 0){
tmp = (int)(pow(10,str.length()) + 1);
}else tmp++;
}
return -1;
}