区间筛

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const N=1e6+7;
int n,m,cnt;
int v[N],p[N],vis[N];
int main(){
	for(int i=2;i<=1e5;++i){
		if(v[i]==0){
			p[++cnt]=i;
			v[i]=i;
		}
		for(int j=1;j<=cnt&&p[j]*i<=1e5&&p[j]<=v[i];++j){  //i%p[j]!=0
			v[ p[j]*i ]=p[j];
		}
	}
	int l,r;
	cin >> l >> r;
	if(l==1) l++;
	for(int i=1;i<=cnt&&p[i]<=sqrt(r);++i){
		for(ll j=l/p[i];j*p[i]<=r;j++){
			if(j*p[i]<l) j++;
			if(j==1) j++;
			vis[  j*p[i]-l ]=1;
		}
	}
	int ans=0;
	for(int i=0;i<=r-l;++i){
		if(!vis[i]) ans++;
	}
	cout << ans;
	return 0;
}

全部评论

相关推荐

哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务