感觉是最简单的代码(首先你得会欧筛)
查看原帖
感觉是最简单的代码(首先你得会欧筛)
1484668
zhr162410223楼主2024/11/30 19:47

其实可以化简为回文判断和欧筛。 首先进行欧筛 在进行回文判断 ***注。除了11,其他偶数位的都不是回文数 以下是代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h> 
#include<stdbool.h>
bool isprime[100000010];
int via[6000010],k=0;
void creat(long long n){
	isprime[1]=isprime[0]=true;
	for(long long i=2;i<=n;i++){
		if(!isprime[i])via[++k]=i;
		for(long l=1;l<=k;l++){
			if(via[l]*i>n)break;
			isprime[via[l]*i]=true;
			if(i%via[l]==0)break;
		}
	}
}
void judge(long long n){
	long long s=0,mid=n;
	while(mid>0){
		s=mid%10+s*10;
		mid/=10;
	}
	if(n==s)printf("%lld\n",n);
	else return ;
}
int main(){
	long long a,b;
	scanf("%lld%lld",&a,&b);
	creat(b);
	for(long i=1;i<=k;i++){
		if(via[i]<a)continue;
		if(via[i]>b)break;
		if(via[i]>=10&&via[i]<100)continue;
		if(via[i]>=1000&&via[i]<10000)continue;
		if(via[i]>=100000&&via[i]<1000000)continue;
		if(via[i]>=10000000&&via[i]<100000000)continue;
		judge(via[i]);
	}
}

//都看到这了,点点赞再走?

2024/11/30 19:47
加载中...