40RE求调
  • 板块P1246 编码
  • 楼主sizexz
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/28 19:49
  • 上次更新2024/8/28 21:46:29
查看原帖
40RE求调
1367886
sizexz楼主2024/8/28 19:49
#include<bits/stdc++.h>
using namespace std;
long long p[12500000],tot,l,r,s;
bool q[12500000],visitor[12500000];
void before()
{
	for(long long i=0;i*i<=r;i++)
	{
		q[i]=1;
	}
	q[1]=0;
	for(long long i=2;i*i<=r;i++)
	{
		if(q[i]==1)
		{
			p[++tot]=i;
		}
		for(long long j=1;j<=tot && p[j]*i<=r;j++)
		{
			q[p[j]*i]=0;
			if(i%p[j]==0)
			{
				break;
			}
		}
	}
}
void find()
{
	for(long long i=0;i<=r-l;i++)
	{
		visitor[i]=1;
	}
	for(long long i=1;i<=tot;i++)
	{
		long long k=p[i];
		long long j=max(k*k,l/k*k);
		if(j<l)
		{
			j+=k;
		}
		for(;j<=r;j+=k)
		{
			visitor[j-l]=0;
		}
	}
}
int main()
{
	cin>>l>>r;
	before();
	find();
	for(long long i=0;i<=r-l;i++)
	{
		if(visitor[i]==1 && i+l!=1)
		{
			s++;
		}
	}
	cout<<s;
}
2024/8/28 19:49
加载中...