52pts悬赏关注
查看原帖
52pts悬赏关注
368111
_Haoomff_楼主2024/6/10 20:12

rt,记录

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool vis[1000005];
int n,m;
ll prime[50005],cnt,L,R;
inline void init(){
	vis[1]=1;
	for(int i=2;i<=46340;++i){
		if(!vis[i])prime[++cnt]=i;
		for(int j=1;j<=cnt&&i*prime[j]<=46340;++j){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)break;
		}
	}
}
inline void solve(){
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=cnt;++i)
		for(int j=max(2*1LL,(L+prime[i]-1)/prime[i]);j<=R/prime[i];++j)
			vis[j*prime[i]-L]=1;
	int ans=0;
	for(int i=0;i<=R-L;++i)
		if(!vis[i])
			++ans;
	cout<<ans<<"\n";
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(;n--;){
		memset(vis,0,sizeof(vis));
		cnt=0;
		cin>>L>>R;
		if(R>m){
			cout<<"Crossing the line\n";
			continue;
		}
		L=max(L,2*1LL);
		init();
		solve();
	}
	return 0;
}
2024/6/10 20:12
加载中...