P1217
难度:4/10
总结
1 同时试验了O(k*根号n)的质数试验法和O(nloglogn)≈O(n)的埃氏筛法,虽然看上去筛法更快,但是,当k不大且n不小的时候,即真正所需知道是否的质数的数不多时,朴素的挨个试验法其实更快,两个方法的代码都在这里。
2 scanf/printf功能更强大而且读写速度几乎比cin/cout快了一倍,所以请尽量使用scanf/printf
3 TLE时,可以试试把scanf/printf替换成更加快速的基于getchar()的快读快写函数(需要理解并记忆)
4 别瞧不起打表,TLE时试试打表。且同一题中打表可能有多种打法,有些打法出来的表就很小,可以用这种(比如本题中打质数表和答案表都可以,但后者显然小得多得多)。
5 就算实在不想打表,也可以半打表,即通过观察TLE程序的最终输出,寻找无需计算的部分进行优化(比如本题中发现8位数中根本没有符合题意的数字,所以算到10000000时直接不算了)
Code
#include<iostream>#include<cstdio>#include<string>#include<vector>#include<algorithm>#include<cstdlib>#include<cmath> using namespace std; int p(int a){ if(a==1)return 0;if(a==2)return 1; for(int i=2;i<=sqrt(a);i++) if(a%i==0)return 0; return 1;}/*bool p[100000001];void p2(int b){ for(int i=1;i<=b;i++)p[i]=1; p[1]=0;p[2]=1;int P=2; while(P!=b) { if(p[P]==1) { for(int i=2;i*P<b;i++) { p[i*P]=0; } } P++; } return;}*/int f(int x){ int no=0,a[10]; while(x!=0) { no++; a[no]=x%10; x/=10; } for(int i=1;i<=no/2;i++) { if(a[i]!=a[no+1-i]) return 0; } return 1;} int main(){ int a,b; cin>>a>>b; for(int i=a;i<=b;i++) { if(f(i)==1) if(p(i)==1) printf("%d\n",i); if(i==9989899)break;//半打表,这个数之后没有回文数了所以直接停止 } return 0;}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具