60RE求调谢谢——提示说数组越界,但我看不出来
查看原帖
60RE求调谢谢——提示说数组越界,但我看不出来
816504
封禁用户楼主2024/8/16 22:16
#include<bits/stdc++.h>
using namespace std;
const long long N=1e6+20;
long long pal[N],tot,l,r,ans;
bool isp[N],vis[N];
void before()
{
	for(long long i=0;i*i<=r;i++) isp[i]=1;
	isp[1]=0;
	for(long long i=2;i*i<=r;i++)
	{
		if(isp[i]==1)
		{
			pal[++tot]=i;
		}
		for(long long j=1;j<=tot&&pal[j]*i<=r;j++)
		{
			isp[pal[j]*i]=0;
			if(i%pal[j]==0)break;
		}
	}
}
void find()
{
	for(long long i=0;i<=r-l;i++) vis[i]=1;
	for(long long i=1;i<=tot;i++)
	{
		long long k=pal[i];
		long long j=max(k*k,l/k*k);
		if(j<l) j+=k;
		for(;j<=r;j+=k)
		{
			vis[j-l]=0;
		}
	}
}
int main()
{
	scanf("%lld %lld",&l,&r);
	before();
	find();
	for(long long i=0;i<=r-l;i++)
	{
		if(vis[i]==1&&i+l!=1) ans++;
	}
	printf("%lld",ans);
}
2024/8/16 22:16
加载中...