Kai’blog

主博客 | 势利纷华,近之而不染者洁,不近者亦洁,君子不立危墙之下。

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;}
posted @   Kai-G  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
Copyright © 2019-2020 拱垲. All rights reserved.
点击右上角即可分享
微信分享提示