洛谷-P1217 [USACO1.5]回文质数 Prime Palindromes

题目描述

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1

1
5 500

输出 #1

1
2
3
4
5
6
7
8
9
10
11
12
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的回文数:

1
2
3
4
5
6
7
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;//(处理回文数...)
}
}
}

题目大意及分析

  1. 本题有上限为100,000,000,所以这道题可以用打表程序解决。值得一说的是,在比赛中或者只判定程序结果的考试当中,打表法无疑是简单粗暴的一种办法,但是在面试中,这种办法不可取。

  2. 我采用的是枚举法,并没有像提示中那样先构造回文数然后判断是否为质数(没看提示,直接开撸)。一遍程序发现TLE了。后来观察所得的回文质数有以下特点:

    这个数必然不是偶数;

    这个数的最高位也不是偶数;

    这样就减少了大量的循环量。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<stdio.h>
#include<math.h>
int rev(int x)//反转这个数,如果与原数相等则是回文数;
{
int new_x=0;
while(x)
{
new_x = x%10+new_x*10;
x=x/10;
}
return new_x;
}
bool isprime(int x)//判断素数函数;
{
for(int m=2;m<=sqrt(x);m++)
{
if(x%m==0)
return false;
}
return true;
}
int wei(int x)//判断这个数的位数;
{
if(10<x&&x<100) return 10;
if(100<x&&x<1000) return 100;
if(1000<x&&x<10000) return 1000;
if(10000<x&&x<100000) return 10000;
if(100000<x&&x<1000000) return 100000;
if(1000000<x&&x<10000000) return 1000000;
if(10000000<x&&x<100000000) return 10000000;
return 1;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);//比cin快;
if(b>9989899) b=9989899;
if(a%2==0) a+=1;
for(int i=a;i<=b;i+=2)//循环,只选择其中奇数;
{
int n = wei(i);
if(i/n%2==0) i+=n;
if(rev(i)==i)
{
if(isprime(i))
printf("%d\n",i);//比cout快;
}
}
return 0;
}
-------------THE----END-------------

本文标题:洛谷-P1217 [USACO1.5]回文质数 Prime Palindromes

文章作者:Deng

发布时间:2019年08月20日 - 22:54

最后更新:2019年09月03日 - 20:43

原始链接:https://cydi.top/2019/08/20/P1217/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

觉得文章对您有帮助请我喝杯咖啡吧^_^
0%