这揪心的数据范围
查看原帖
这揪心的数据范围
775551
caojiaming楼主2022/12/7 10:07

你们别看n<=8

其实它代表的是10^8

我先不用筛法

以下是六十分代码(#4#5TLE)

#include <bits/stdc++.h>
const int Max=1e8;
bool flag[Max];
int cur=1;
int a[Max];
void shai()//欧拉筛
{
    memset(flag,1,sizeof(flag));
    flag[0]=flag[1]=0;
    for(int i=2;i<=1e8;i++)
	{
		if(flag[i])
		{
			a[cur]=i;
			cur++;
		}
		for (int j=1;j<cur&&i*a[j]<=1e8;j++)
        {
            flag[a[j]*i]=0;
            if (i%a[j]==0) break;
        }
	}
}
bool pr1(int j)
{
    if(j<=1)
    {
        return 0;
    }
    for(int i=2;i*i<=j;i++)
    {
        if(j%i==0)
        {
            return 0;
        }
    }
    return 1;
}
bool pr2(int i)
{
    return flag[i];
}
bool pd(int d)
{
    while(d>0)
    {
        if(!pr1(d))
        {
            return 0;
        }
        d-=(d%10);
        d/=10;
    }
    return 1;
}
int main()
{
    int N;
    scanf("%d",&N);
    int shi=pow(10,N-1);
    int end=pow(10,N)-1;
    for(int i=shi;i<=end;i++)
    {
        if(pd(i))
        {
            printf("%d\n",i);//不敢用cout
        }
    }
    return 0;
}

以下是用欧拉筛80分代码(最后一点TLE)

#include <bits/stdc++.h>
const int Max=1e8;
bool flag[Max];
int cur=1;
int a[Max];
void shai()//欧拉筛
{
    memset(flag,1,sizeof(flag));
    flag[0]=flag[1]=0;
    for(int i=2;i<=1e8;i++)
	{
		if(flag[i])
		{
			a[cur]=i;
			cur++;
		}
		for (int j=1;j<cur&&i*a[j]<=1e8;j++)
        {
            flag[a[j]*i]=0;
            if (i%a[j]==0) break;
        }
	}
}
bool pr1(int j)
{
    if(j<=1)
    {
        return 0;
    }
    for(int i=2;i*i<=j;i++)
    {
        if(j%i==0)
        {
            return 0;
        }
    }
    return 1;
}
bool pr2(int i)
{
    return flag[i];
}
bool pd(int d)
{
    while(d>0)
    {
        if(!pr2(d))
        {
            return 0;
        }
        d-=(d%10);
        d/=10;
    }
    return 1;
}
int main()
{
    shai();
    int N;
    scanf("%d",&N);
    int shi=pow(10,N-1);
    int end=pow(10,N)-1;
    for(int i=shi;i<=end;i++)
    {
        if(pd(i))
        {
            printf("%d\n",i);//不敢用cout
        }
    }
    return 0;
}

欧拉筛都会超时 更不用说埃筛了 求优化!

2022/12/7 10:07
加载中...