1. Titre
Trouver le nombre premier de palindrome minimum supérieur ou égal à N.
Rappelez-vous que si un nombre est supérieur à 1 et que ses facteurs ne sont que 1 et lui-même, alors le nombre est premier.
Par exemple, 2, 3, 5, 7, 11 et 13 sont des nombres premiers.
Rappelons que si un nombre est lu de gauche à droite et de droite à gauche, alors le nombre est un palindrome.
Par exemple, 12321 est le nombre de palindromes.
示例 1:
输入:6
输出:7
示例 2:
输入:8
输出:11
示例 3:
输入:13
输出:101
提示:
1 <= N <= 10^8
答案肯定存在,且小于 2 * 10^8。
Source: LeetCode (LeetCode)
Lien: https://leetcode-cn.com/problems/prime-palindrome Le
droit d'auteur appartient au réseau de déduction. Veuillez contacter l'autorisation officielle pour la réimpression commerciale, et veuillez indiquer la source de la réimpression non commerciale.
2. Résolution de problèmes
- Selon ce pass, laissez tomber de gros nombres pour éviter le timeout
class Solution {
public:
int primePalindrome(int N) {
if(N==1)
return 2;
if(8<=N && N<=11)
return 11;
int bit;
for(;N;++N)
{
if(10000000 < N && N < 100000000)
N = 100000000;//没有8位数的回文素数
if(isPalindrome(N,bit) && (bit%2) && isPrime(N))//奇数位的回文数才可能是质数,除11
return N;
}
return -1;
}
bool isPalindrome(int n, int &bit)
{
int t = 0, N = n;
bit = 0;
while(n)
{
t = t*10+n%10;
n /= 10;
bit++;
}
return (t==N);
}
bool isPrime(int n)
{
for(int i = 2; i <= sqrt(n); i++)
if(n%i==0)
return false;
return true;
}
};