其实可以化简为回文判断和欧筛。
首先进行欧筛
在进行回文判断
***注。除了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]);
}
}
//都看到这了,点点赞再走?