[USACO1.5]回文质数 Prime Palindromes

题目描述

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

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

输入格式

第一行输入两个正整数 a a a 和 b b b。

输出格式

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

样例 #1

样例输入 #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 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;//(处理回文数...)}}}

本题重点:解决超时问题
【题目解析】
回文质数的意思是要求:满足一个数既是回文数又是质数。

一、我们先根据提示1完成本题,看一下效果。 先找出所有回文数,再找出所有质数。

回文数函数编写

bool huiwen(int x){int x1=0,a=x;while(a>0){x1=x1*10+a%10;a/=10;}return x1==x;}

质数代码编写

bool prime(int x){for(int i=2;i<=sqrt(x);i++)if(x%i==0)return 0;return 1;
}

主函数部分

int main(){int a,b;cin>>a>>b;for(int i=a;i<=b;i++){if(huiwen(i))if(prime(i))cout<<i<<endl;    return 0;
}

通过八个测试点,拿到88分。测试时间1.79s,题目要求1s,已经超时。
二、根据题目第二个提示完成。去掉全部的偶数项。
需要修改主代码部分

int main(){int a,b;cin>>a>>b;if(a%2==0)a++;for(int i=a;i<=b;i+=2){if(huiwen(i))if(prime(i))cout<<i<<endl;return 0;
}

通过八个测试点,拿到88分。测试时间1.52s,时间有优化,但题目要求1s,还是超时。
三、接下来我在百度上查阅了一些资料,发现两位的回文质数只有一个,那就是11。而且四位数、六位数、八位数的数均不是回文质数。那么可以排出很大一部分数字。
于是主函数部分可以修改为:

int main(){int a,b;cin>>a>>b;if(a%2==0)a++;for(int i=a;i<=b;i+=2){if(i>=1000&&i<=9999||i>=100000&&i<=999999||i>=10000000&&i<=99999999)continue;if(huiwen(i))if(prime(i))printf("%d\n",i);}return 0;
}

此时全部测试点均通过,测试时间为550ms,小于1s。
完整代码如下:

#include<bits/stdc++.h>
using namespace std;bool prime(int x){for(int i=2;i<=sqrt(x);i++)if(x%i==0)return 0;return 1;
}bool huiwen(int x){int x1=0,a=x;while(a>0){x1=x1*10+a%10;a/=10;}return x1==x;}int main(){int a,b;cin>>a>>b;if(a%2==0)a++;for(int i=a;i<=b;i+=2){if(i>=1000&&i<=9999||i>=100000&&i<=999999||i>=10000000&&i<=99999999)continue;if(huiwen(i)){if(prime(i)){printf("%d\n",i);}}}    return 0;
}

平时还是需要积累经验,知识经验积累得越多,解决问题就越轻松~~

P1217 [USACO1.5]回文质数 Prime Palindromes 题解(来源:洛古)相关推荐

  1. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes 题解 C/C++

    知识点: 回文数有两种 一种是单数位数,abcba,一种是双数位数,abccba 而双数位数是质数的只有11,即偶位回文数全不是质数除了11:所以不需要枚举到1亿,到1千万就好了 以下几种方法供参考 ...

  2. P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表)

    P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表) 一:埃氏筛(时间复杂度--nloglogn) 重点:一个数x是合数,则它的倍数也是合数 //用埃氏筛生成 ...

  3. P1217 [USACO1.5]回文质数 Prime Palindromes——回文质数性质、打表

    [USACO1.5]回文质数 Prime Palindromes 题目描述 因为 151151151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151151151 是回文质数. ...

  4. 洛谷 - P1217 [USACO1.5]回文质数 Prime Palindromes(欧拉线性筛+数论小知识)

    题目链接:点击查看 题目大意:给出一个a和b,求出区间[a,b]中所有回文质数,回文质数指的是一个数既是回文数也是质数 题目分析:首先质数好判断,我们只需要用欧拉筛预处理打好表即可,判断回文数我们也只 ...

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

    暴力输出5~1e8的回文质数 #include <bits/stdc++.h> using namespace std; int cnt; bool isprim(int x) //10^ ...

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

    我就叫大家打表吧,自己也刚学会: 由于有些题目直接提交又会超时,所以打表是一个不错的解决方法. 对于回文质数而言,判断回文,判断质数就ok了 1.存入文件 #include<bits/stdc+ ...

  7. 【素数】P1217 [USACO1.5]回文质数 Prime Palindromes

    https://www.luogu.com.cn/problem/P1217 考点:素数.回文.二分.打表 题意: 找出5到1e8的回文素数. 解法: 直接暴力遍历1亿次必定超时,可以用打表法... ...

  8. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  9. P1217 [USACO1.5]回文质数 Prime Palindromes(打表)

    打表 代码解析 主函数 int main() {int x;//cin >> a >> b;scanf("%d %d", &a, &b);x ...

最新文章

  1. 学习C语言的理由-别问我为什么,会用C语言,就是NB
  2. python所有文件都能用文本方式打开_python 打开文件方式讲解、常用读写操作指令(全)以及读写常见问题...
  3. 用python画大白_[Python][可视化]matplotlib基础入门
  4. 何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督
  5. SQL实战之获取所有部门当前manager当前的薪水
  6. 想看程序员的成长课这本书
  7. FireMoneky 画图 Point 赋值
  8. 从二元函数的泰勒展开到应用Hessian矩阵检测边缘
  9. 华为海思K3平台总体特性
  10. 旧电脑 软路由 openwrt 自定义安装ipk 操作记录
  11. 截图工具-picpick绿色破解版免安装
  12. 杭州电子科技大学考研计算机科学与技术,杭州电子科技大学考研好考吗
  13. 出"程序员"身上的"六宗罪"
  14. 2018软科计算机科学工程排行,2018全球计算机与工程学科排名:清华第7,中国9个学科世界第一!...
  15. 图片轮播banner实现
  16. Java SHA哈希示例
  17. 接口安全评估基本流程
  18. MacBook常用快捷键总结
  19. java面试题_度小满一面_java面经汇总
  20. IDEA安装及配置jdk

热门文章

  1. linebreak_linebreak-style
  2. 网游外挂编写完全攻略
  3. C#下载代码,防迅雷
  4. 如何将迅雷设为默认下载器
  5. android内联优化导致Inlined method resolution crossed dex file boundary
  6. 火拼《俄罗斯方块》解析
  7. 微擎本地服务器站点注册,微擎站点添加了多个域名,怎么为每个域名部署免费SSL证书呢?...
  8. 虚拟局域网VLAN的简介
  9. getaddrinfo的用法详解 .
  10. 楚河怎么下rust_沙盒战神在这游戏变弱鸡,疯狂被教做事!