zoukankan      html  css  js  c++  java
  • 洛谷 P1217 回文质数

    洛谷 P1217 回文质数

    链接

    https://www.luogu.org/problem/P1217

    题目

    题目描述

    因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。

    写一个程序来找出范围 [a,b] (5 <a < b < 100,000,000)( 一亿)间的所有回文质数。

    输入格式

    第 1 行: 二个整数 a 和 b .

    输出格式

    输出一个回文质数的列表,一行一个。

    输入输出样例

    输入 #1

    5 500
    

    输出 #1

    5
    7
    11
    101
    131
    151
    181
    191
    313
    353
    373
    383
    

    说明/提示

    Hint 1: Generate the palindromes and see if they are prime.

    提示 1: 找出所有的回文数再判断它们是不是质数(素数).

    Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below.

    提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

    题目翻译来自NOCOW。

    USACO Training Section 1.5

    产生长度为5的回文数:

    for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
         for (d2 = 0; d2 <= 9; d2++) {
             for (d3 = 0; d3 <= 9; d3++) {
               palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)
             }
         }
     }
    

    思路

    说明不用看,直接编码就行了。我在LeetCode做过一样的题,不过这个对于性能要求更高一点。可以分成两个要求,质数,回文。

    所有偶数位的回文数,都可以被11整除,证明么得,所以一下就能筛掉很多数,偶数不为质数,又可以筛掉一部分,之后就直接判断即可,本来我用的是字符处理,之后发现这样效率有点低,换成了数组比较,判断回文的开头和回文无关,只是我顺手把判断条件放那了,效率应该比放在质数那边高一点。

    代码

    #include<iostream>
    #include<cmath>
    #include<cstring>
    
    using namespace std;
    
    //质数 
    bool isPrime(int i)
    {
        for (int j = 2; j <= sqrt(i); j++)
            if (i % j == 0) 
                return false;
        return true;
    }
    
    //回文 
    bool isHui(int s)
    {
    	if((s>=1000 && s<10000)|| (s>=100000 && s<1000000) || (s>=10000000 && s<100000000))
    		return false;
        
    	int a[10],i=0;
    	while(s>0)
    	{
    		a[i]=s%10;
    		s=s/10;
    		i++;
    	}
    	for(int j=0;j<i/2+1;j++)
    	{
    		if(a[j]!=a[i-j-1])
    			return false;
    	}
        return true;
    }
        
    int main()
    {
    	int a,b;
    	cin>>a>>b;
    	for(int i=a;i<=b;i++)
    	{
    		if(i%2==0)
    			continue;
    		if(isHui(i) &&isPrime(i))
    			cout<<i<<endl;
    	}
    	return 0;
    }
      
    
  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11375152.html
Copyright © 2011-2022 走看看