码迷,mamicode.com
首页 > 其他好文 > 详细

回文素数

时间:2019-09-26 23:36:48      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:love   discus   简单   mep   merge   min   ali   public   个数   

leetcode 866. Prime Palindrome

题目:https://leetcode.com/problems/prime-palindrome/

解法:https://leetcode.com/problems/prime-palindrome/discuss/158439/c%2B%2B-evenodd-length-palindrome-merge-sort-like-solution.-interviewer-really-loves-it-kiss

题目:给定一个数,输出大于等于这个数的最小的回文素数。

涉及到两个经典数学问题,求素数和求回文数。

判断素数有很多算法,可以使用最简单的遍历,因为最好记。

    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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!