警钟撅烂 (一定要开long long!)
  • 板块P1835 素数密度
  • 楼主csq_pig
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/22 17:31
  • 上次更新2023/12/22 20:09:25
查看原帖
警钟撅烂 (一定要开long long!)
1073710
csq_pig楼主2023/12/22 17:31

十年OI一场空,不开longlong见祖宗

(被long long卡RE卡了半个小时)

(还以为是数组开小了,没想到是这个long long π_π)

#include <bits/stdc++.h>
using namespace std;
long long L,R;
bool is_prime[1000010];
int prime[1000010],t;
bool not_prime[6000010];
void init ()
{
	for (int i=2;i<=500000;i++) is_prime[i]=true;
	for (int i=2;i<=500000;i++) {
		if (is_prime[i]) prime[++t]=i;
		for (int j=1;j<=t && prime[j]*i<=500000;j++) {
			is_prime[i*prime[j]]=false;
			if (i%prime[j]==0) break;
		}
	}
}
int main()
{
	cin>>L>>R;
	L=L==1?2:L;
	init();
	for (int i=1;i<=t;i++) {
		long long k=L/prime[i];
		if (k<2) k=2;
		k*=prime[i];
		for (;k<=R;k+=prime[i])
			if (k-L>=0) not_prime[k-L]=true;
	}
	int ans=0;
	for (long long i=0;i<=R-L;i++)
		if (!not_prime[i]) ans++;
	cout<<ans;
	return 0;
}

2023/12/22 17:31
加载中...