标签:love discus 简单 mep merge min ali public 个数
leetcode 866. Prime Palindrome
题目:https://leetcode.com/problems/prime-palindrome/
题目:给定一个数,输出大于等于这个数的最小的回文素数。
涉及到两个经典数学问题,求素数和求回文数。
判断素数有很多算法,可以使用最简单的遍历,因为最好记。
bool isPrime(int num){
if (num < 2 || num % 2 == 0) return num == 2;
for (int i = 3; i * i <= num; i+=2){
if (num % i == 0) return false;
}
return true;
}
判断回文则可以用字符串,左子串与右子串是否相等。
另外可以采用先构造回文串,再判断是否是素数的方法,减少遍历的数字个数。
class Solution {
public:
int primePalindrome(int N) {
int evenSeed = 1;
int oddSeed = 1;
int cur = 0;
while (cur < N || !isPrime(cur)){
int evenp = genEvenPalin(evenSeed);
int oddp = genOddPalin(oddSeed);
cur = min(evenp, oddp);
evenp > oddp ? ++oddSeed : ++evenSeed;
}
return cur;
}
int genEvenPalin(int seed){
string half = to_string(seed);
return stoi(half + string(half.rbegin(), half.rend()));
}
int genOddPalin(int seed){
string half = to_string(seed);
return stoi(half + string(half.rbegin() + 1, half.rend()));
}
bool isPrime(int num){
if (num < 2 || num % 2 == 0) return num == 2;
for (int i = 3; i * i <= num; i+=2){
if (num % i == 0) return false;
}
return true;
}
};
标签:love discus 简单 mep merge min ali public 个数
原文地址:https://www.cnblogs.com/vimery/p/11594858.html