杭电1431 回文素数 (数论)
2015-12-24 13:10
218 查看
素数回文
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15918 Accepted Submission(s): 3534
Problem Description
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
Input
这里有许多组数据,每组包括两组数据a跟b。
Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
Sample Input
5 500
Sample Output
5 7 11 101 131 151 181 191 313 353 373 383
Author
xiaoou333
其实这个题还是蛮坑的题目,题目中的数据范围直接吓死宝宝了,参考了大牛的代码,学会了思维。这里详解一下。
首先这个题目是要判断回文素数,表示这个数是回文数,也是素数,我直接想到的是打印素数表,但是好像数据范围有点大,数组绝壁会MLE.然后就默默的用这样的方法来判断是否为素数:
int isprime(int a) { int i; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; }
然后就是判断回文数,既然是回文数,回文回文,我们回一个不就行了》?
所谓回文数,可以利用其对称性来判断是否为回文数,当然也可以用整个数倒过来的方式判断 ,这里给出实例:
121 倒过来还是121.但是如果是321倒过来是123就不是回文数,所以这里我们利用特性,来判断是否为回文数。
int huiwen(int a) { int i=a,s=0; while(i) { s=s*10+i%10; i/=10; } if(a==s)return 1; return 0; }
然后就是漫长的TLE过程,看了大牛的代码,知道在5 1000000000的范围内最大的回文素数是9989899.如果范围确定了之后,就不会超时了,这里范围的确定是如何判断的呢?这个就是个思维的问题了,在你的控制框中输入这样的一个数据:5 1000000000,然后发现,输出到9989899之前都是很畅通的在输出,但是输出了9989899之后,就没有数字输出了,而且程序还在跑,这个时候就判断出来你超时了。但是如果你把这个9989899定为最大回文素数的时候,程序跑到这个数就不会继续跑了。这也是一种打表思维。无论作为读者的你有没有学到东西,我是学到了。
这里上AC完整代码:
#include <iostream>
#include<stdio.h>
using namespace std;
int isprime(int a) { int i; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; }
int huiwen(int a) { int i=a,s=0; while(i) { s=s*10+i%10; i/=10; } if(a==s)return 1; return 0; }
int main (void)
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
for(int i=a;i<=b&&i<=9989899;i++)
if(huiwen(i)&&isprime(i))printf("%d\n",i);
printf("\n");
}
return 0;
}
相关文章推荐
- linux C之srand函数
- SQLServer 复制和数据库镜像 具体配置部署
- 圣诞福利之“自由开发者的崛起”
- JavaScript多线程之二~~Node.js中的Web Worker
- python+opencv cv2.VideoCapture获取视频失败 解决方法
- 用putty让windows主机实现内网映射
- 微信平台开发者账户申请流程
- git
- 12月24号 NSMutableDictonary操作
- Android Studio 多渠道打包
- gedit写Makefile出现Makefile:16: *** missing separator. Stop
- Java生成随机字符串
- 西普实验吧部分逆向题writeup(二)
- 插入排序
- Eclipse 环境部署
- 手把手教你在Windows下搭建React Native Android开发环境
- yum服务器搭建(深入理解yum工作原理)
- cell的重用机制
- window 开机启动&延迟脚本文件
- Linux 普通用户su命令切换控制