社区讨论

警钟撅烂 (一定要开long long!)

P1835素数密度参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lqgfnvzj
此快照首次捕获于
2023/12/22 17:32
2 年前
此快照最后确认于
2023/12/22 20:09
2 年前
查看原帖
十年OI一场空,不开longlong见祖宗
(被long long卡RE卡了半个小时)
(还以为是数组开小了,没想到是这个long long π_π)
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...