最后一个点mle了,大佬看看能不能优化一下
查看原帖
最后一个点mle了,大佬看看能不能优化一下
393485
xiersiki楼主2020/11/10 17:46
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<stdbool.h>
#define size 100000000
int num[size],pr[size];
void judge(int b)//打2到b的质数表
{
    int i,j,count=0;
    for(i=2;i<b;i++){
        if(i>2&&i%2==0)
        continue;
        else{
        if(num[i]){
        pr[count++]=i;
        }
        for(j=0;j<i&&pr[j]*i<b;j++){
            num[pr[j]*i]=0;
            if(i%pr[j]==0)
                break;}}
        }
    }

}
int judge2(int num)//判断回文数
{
    int a,a_1,now=0;
    a=num;
    while(num!=0){
        a_1=num%10;
        now=now*10+a_1;
        num=num/10;
    }
    if(a==now)
        return 1;
    else return 0;
}
int main(void)
{
    int a,b,k=1,m;
    scanf("%d %d",&a,&b);
    for(int  i=0;i<=b;i++){
        num[i]=1;
    }
    judge(b);//得到一个2-b的质数表
    for(int i=a;i<=b;i++){
        if(num[i]){
        if(judge2(i)){
            num[k]=i;
            k++;
        }
        }
    }
    for(m=1;m<=k-1;m++)
        printf("%d\n",num[m]);
    return 0;
}

必须要先判断回文数吗,

2020/11/10 17:46
加载中...