【HDU】 1431 素数回文
2016-05-30 20:39
246 查看
素数回文
题目链接
素数回文题目大意
求出a到b之间的回文素数。题解
仍然是打表暴力…关于这个打表的界限是一开始开50000000的时候猜的,然后关于打表的话,能在外面打的全放在外面吧…一开始判定回文的循环放在内层就过不了,放在外面打表就过了…
代码
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int a,b,tab[200000],h,t; int ans[200000]; bool vis[10000005]; bool che(int x) { int c=x,t=0; while(c) { t*=10; t+=c%10; c/=10; } return (x==t); } void settab(int high) { h=0; memset(tab,0,sizeof(tab)); memset(vis,0,sizeof(vis)); for (int i=4;i<=high;i+=2) vis[i]=1; int p=(int) sqrt(high); for (int i=3;i<=p;i+=2) if (!vis[i]) { int j=i*i; while(j<=high) { vis[j]=1; j+=i; } } for (int i=2;i<=high;i++) if (!vis[i] && che(i)) tab[h++]=i; } int ser(int k) { int l=0,r=h-1,mid; while (l!=r) { mid=(l+r)>>1; if (k<=tab[mid]) r=mid; else l=mid+1; } return l; } int main() { settab(9989899); while(scanf("%d%d",&a,&b)!=EOF) { int low=ser(a),high=ser(b); if (high!=h-1 && tab[high]!=b) high--; for (int i=low;i<=high;i++) printf("%d\n",tab[i]); printf("\n"); } return 0; }
相关文章推荐
- POJ 1664 放苹果 (递推)
- Core Data浅谈初级入门
- 第二阶段个人工作总结(3)
- 神经网络浅析
- Easy-题目46:205. Isomorphic Strings
- corosync v2 + pacemaker 高可用mariadb服务
- Android基础知识整合篇——Activity知识点
- 怎么快速看懂别人写的module和ipcore
- 视图
- Java性能提高小常识
- Easy-题目45:58. Length of Last Word
- 什么是一阶逻辑(First-order Logic)
- GCC编译和GDB调试
- memched1.0源码阅读(3)——运行流程
- TS流打包总结
- 二叉搜索树的查找、插入、删除操作
- tushare金融数据
- 夜间模式的实现
- Logistic & softmax
- poj2777 Count Color