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;
    }
      
    
  • 相关阅读:
    Android--Facebook Login with LoginButton
    Android--Bitmap处理、圆角、圆形
    Android--打开指定程序(微博/微信/QQ等)
    Android--Google Map API V2使用
    关于Reportviewer
    Oracle Clob使用
    ASPNET WebForm T1453工作记录
    Oracle脚本批量导入时,输出日志文件
    Easyui DataGrid Editor
    Oracle 更改数据2中方式差异
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11375152.html
Copyright © 2011-2022 走看看