素数回文
2014-07-30 23:23
267 查看
素数回文
[align=center]Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11046 Accepted Submission(s): 2578
[/align]
[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
[align=left]Sample Output[/align]
5
7
11
101
131
151
181
191
313
353
373
383
最开始直接判断是不是素数,然后判断是否是回文,时间远远不能承受。事实上由于回文后面一段由前面一段确定,因此判断到五位数就可以了。对于小于100000的数n,判断由n作为前半段组成的回文数是否是素数。代码是题解中看到的,用了dfs
#include<iostream> #include<stdio.h> #include<math.h> #define N 10000 using namespace std; int cnt=0,ans ={2,3,5,7}; int tmp[12]; int change(int dep,int flag) {//flag为1表示形如1234321的回文,为0表示形如12344321的回文 int x=0; if(flag) { for(int i=1;i<=dep;i++) x=x*10+tmp[i]; for(int i=dep-1;i>=1;i--) x=x*10+tmp[i]; } else { for(int i=1;i<=dep;i++) x=x*10+tmp[i]; for(int i=dep;i>=1;i--) x=x*10+tmp[i]; } return x; } bool isprime(int n) { int k=sqrt(n)+1; for(int i=2;i<=k;i++) if(n%i==0)return false; return true; } void dfs(int pos,int dep,int flag) { if(pos>dep) { int x=change(dep,flag); if(isprime(x))ans[cnt++]=x; return ; } for(int i=0;i<10;i++) { if(i==0&&pos==1)continue; tmp[pos]=i; dfs(pos+1,dep,flag); } } void Init() { int l,k; cnt=4; for(l=2;l<=9;l++) { k=(l+1)/2; if(l&0x1)dfs(1,k,1); else dfs(1,k,0); } } int main() { Init(); int L,R; while(cin>>L>>R) { int i=0; while(ans[i]<L)i++; while(ans[i]<=R&&i<cnt) printf("%d\n",ans[i++]); printf("\n"); } return 0; }
相关文章推荐
- hdu 1431 素数回文
- hdu 1431 素数回文
- 素数,回文数,回文素数,可逆素数
- HDU-1431(素数回文)(思维)(dfs+素数判定)
- 回呀回呀文呀文,素数呀素数。。。。到底怎么回文呀??(泪奔ing)
- 第11周项目六 回文~素数(1)
- 第11周项目6-回文、素数-回文素数
- 第十一周项目六——回文,素数(4)(输出1000以内的所有素数)
- 第十一周项目6-回文、素数(判断回文数)
- 第十一周项目六——回文,素数(4)球10000以内的所有可逆素数
- 第十一周项目6 (4)输入一个数,输出这个数以内的所有回文素数
- 第11周项目6:回文,素数
- 第11周项目6-回文、素数(3)
- C++第7次上机实验:素数和回文
- C++第7次实验-素数与回文
- 回文素数
- 第十二周上机项目4(3):输出10000以内的所有回文素数
- 回文素数
- 素数回文(hdu1431)
- 素数回文(hdu1431)