线性筛为啥还是超时?
查看原帖
线性筛为啥还是超时?
642227
Qingkkkk楼主2022/4/16 16:19

我先用线性筛把素数表打出来,然后在这个[a,b]范围里求回文数

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
bool judge[100000005];
int prime[100000000];
int s=0;
int judgeprime(int n)
{
	memset(judge,1,sizeof(judge));
	for(int i=2;i<=n;i++)
	{
		if(judge[i])
		{
			prime[++s]=i;
		}
		for(int j=1;j<=s;j++)
		{
			if(i*prime[j]>n)
			{
				break;
			}
			judge[i*prime[j]]=0;
			if(i%prime[j]==0)
			{
				break;
			}
		}
	}
	return s;
}
int HWS(int a)
{
	int d=a,c=0;//d=i防止在循环里改变i的值,c用来表示数字位数 
	int Q[15];
	for(;;c++)//用数组储存各个位置的数字 
	{
		Q[c]=d%10;
		d=d/10;
		if(d==0)
		{
		break;
		}
	}
	for(int v=0;v<=c;v++)//如果比较的位置到C/2,则输出 
	{
		if(Q[v]!=Q[c-v])
			break;
		if(v>=c/2)
		{
			return 1;
			break;
		}	
	}	
	return 0;
}
int main()
{
	int a,b;
	do
	{
		scanf("%d%d",&a,&b);
	}while(a<5||b>100000000);
	judgeprime(b);
	for(int i=1;i<=s;i++)
	{
		if(prime[i]<a)
		{
			continue;
		}
		if(HWS(prime[i]))
		{
			printf("%d\n",prime[i]);
		}
	}
	return 0;
}
2022/4/16 16:19
加载中...