素数回文(hdu1431)
2018-03-23 13:38
155 查看
素数回文
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21731 Accepted Submission(s): 5072
[align=left]Problem Description[/align]
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
[align=left]Input[/align]
这里有许多组数据,每组包括两组数据a跟b。
[align=left]Output[/align]
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
[align=left]Sample Input[/align]
5 500
一定要先求回文,素数远比回文多,否则会超时间
ac代码:
#include<stdio.h> #include<algorithm> #include<cmath> #include<iostream> using namespace std; bool test(int x) { for(int i=2;i<=sqrt(x);i++) if(x%i==0) return 0; return 1; } int main() { int n,m,j,k,l=0,flag,a,b,s[20000]={0};///打表,计算回文所以回文素数并保存排序. for(int i=1;i<=10000;i++) ///一定要先计算回文再计算素数 { j=1,a=b=k=i,flag=0; for(int j=0;k>0;k/=10,j++) { a=a*10+k%10; if(j>0) b=b*10+k%10;///b比a慢一步,少一位,当i=123时候,a=123321,b=12321. } if(a&1)///a与b的第一位相同,所以只要a求是否为偶数,偶数就不用看是否为素数了 { if(test(a)) s[l++]=a; if(test(b)) s[l++]=b; } } sort(s,s+l);///排序在能顺序输出 while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<l;i++) if(s[i]>=n&&s[i]<=m) cout<<s[i]<<endl; printf("\n"); } return 0; }
相关文章推荐
- HDU1431 素数回文
- 素数回文(hdu1431)
- 素数回文(hdu1431)
- HDU1431 素数回文 【暴力】
- hdu1431 素数回文(素数筛/埃拉托斯特尼筛法)
- HDU1431 素数回文 (模拟))
- HDU1431:素数回文
- HDU-1430-素数回文
- 第十一周项目六 回文、素数——判断是否为回文数
- 第11周项目六 回文~素数(6)
- 第11周 项目6-回文.素数(2)
- 第十一周项目6.4.3输出1000以内所有的回文素数
- 第11周项目6-回文、素数
- 第十一周项目六回文,素数(3)
- 第11周项目6 回文数,素数(3素数)
- HDU-1431-素数回文
- 1144: 素数回文
- hdoj 素数回文 1431 (模拟)
- HDU 1431 素数回文
- 一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的