回文素数
Posted vimery
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文素数相关的知识,希望对你有一定的参考价值。
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; } };
以上是关于回文素数的主要内容,如果未能解决你的问题,请参考以下文章