前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 866. 回文素数(除11外,偶数位的回文数都不是质数)

LeetCode 866. 回文素数(除11外,偶数位的回文数都不是质数)

作者头像
Michael阿明
发布2020-07-13 15:37:34
7950
发布2020-07-13 15:37:34
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

求出大于或等于 N 的最小回文素数。

回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。

例如,2,3,5,7,11 以及 13 是素数。

回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。

例如,12321 是回文数。

代码语言:javascript
复制
示例 1:
输入:6
输出:7

示例 2:
输入:8
输出:11

示例 3:
输入:13
输出:101
 
提示:
1 <= N <= 10^8
答案肯定存在,且小于 2 * 10^8。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/prime-palindrome 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

除11外,偶数位的回文数如456654等,都不是质数,他们都可以被11整除

  • 根据这一条 pass掉一些大数,避免超时
代码语言:javascript
复制
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;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档