欧拉筛都干出来,最后一个点都超时

P1217 [USACO1.5] 回文质数 Prime Palindromes

mrHCT @ 2023-01-14 00:00:24

#include<iostream>
using namespace std;
int isprime[100000000];
bool notprime[100000000];
int k=0;
int shu=100000000;
int sk=0;
int t1=0;
int main()
{   int a,b;
    cin>>a>>b;
    for(int i=2;i<=b;i++)
    {
        if(notprime[i]==false)
        {
            isprime[k]=i;
            if(a>=isprime[k-1]&&a<=isprime[k])
            {
            a=k;
            }
            k++;
        }
        for(int j=0;j<k&&isprime[j]*i<shu;j++)
        {
            notprime[isprime[j]*i]=true;
            if(i%isprime[j]==0)break;
        }
    }       
    isprime[0]=0;isprime[1]=0;
        for(int i=a;i<=k;i++)
        {
            int n=isprime[i];
            int sum=0;
            for(int j=0;n>0;j++)
            {   
            sum=sum*10+n%10;
            n=n/10;
        }
        if(sum==isprime[i]&&isprime[i]!=0)
        cout<<isprime[i]<<endl;
        }
//cout<<a;
    return 0;
}

by OwenTZC @ 2023-01-14 00:30:28

感觉。。不如无耻打表过


by DioxygenDifluoride @ 2023-01-14 08:43:56

@mrHCT 请不要用 cin,cout,因为它们太慢了

#include<iostream>
using namespace std;
int isprime[100000000];
bool notprime[100000000];
int k=0;
int shu=100000000;
int sk=0;
int t1=0;
int main()
{   int a,b;
    scanf("%d%d",&a,&b);
    for(int i=2;i<=b;i++)
    {
        if(notprime[i]==false)
        {
            isprime[k]=i;
            if(a>=isprime[k-1]&&a<=isprime[k])
            {
            a=k;
            }
            k++;
        }
        for(int j=0;j<k&&isprime[j]*i<shu;j++)
        {
            notprime[isprime[j]*i]=true;
            if(i%isprime[j]==0)break;
        }
    }       
    isprime[0]=0;isprime[1]=0;
        for(int i=a;i<=k;i++)
        {
            int n=isprime[i];
            int sum=0;
            for(int j=0;n>0;j++)
            {   
            sum=sum*10+n%10;
            n=n/10;
        }
        if(sum==isprime[i]&&isprime[i]!=0)
        printf("%d\n",isprime[i]);
        }
//cout<<a;
    return 0;
}

by mrHCT @ 2023-01-14 15:07:06

@woshishabi250 学到了学到了


by Lucas2024 @ 2023-01-25 16:06:01

#include<iostream>
#include<cmath>
using namespace std;
int m,n,pal[100000005],pos=4;
bool isprime(int x)
{
    int i;
    for(i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
        {
            return false;
            break;
        }       
    }
    return true;
}
int main()
{
    int a,b,c,d,e,i;
    cin>>m>>n;
    //构造回文数 
    pal[1]=5;pal[2]=7;pal[3]=11;
    for(a=1;a<=9;a+=2)/*只有奇数是素数*/
    {
        for(b=0;b<=9;b++)
        {
            pal[pos++]=101*a+10*b;
        }       
    }
    for(a=1;a<=9;a+=2)
    {
        for(b=0;b<=9;b++)
        {
            for(c=0;c<=9;c++)
            {
                pal[pos++]=10001*a+1010*b+100*c;
            }
        }
    }
    for(a=1;a<=9;a+=2)
    {
        for(b=0;b<=9;b++)
        {
            for(c=0;c<=9;c++)
            {
                for(d=0;d<=9;d++)
                {
                    pal[pos++]=1000001*a+100010*b+10100*c+1000*d;
                }
            }
        }
    }
    for(a=1;a<=9;a+=2)
    {
        for(b=0;b<=9;b++)
        {
            for(c=0;c<=9;c++)
            {
                for(d=0;d<=9;d++)
                {
                    for(e=0;e<=9;e++)
                    {
                        pal[pos++]=100000001*a+10000010*b+1000100*c+101000*d+10000*e;
                    }
                }               
            }
        }
    }   
    for(i=1;pal[i]<=n;i++)
    {
        if(pal[i]>=m&&isprime(pal[i]))
        {
            cout<<pal[i]<<endl;
        }
    }
    return 0;
}

|