求助
查看原帖
求助
933530
Tim0509楼主2023/3/7 13:40

求助,28分

很神奇

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=2e+9;
const int N1=1e4;
const int N=1e6;
ll prime[N1+5],vis[N1+5];
ll a[N+5];
ll L,R;
void Prime(ll n){
	for(ll i=1;i<=n;i++)vis[i]=0;
	prime[0]=0;
	for(ll i=2;i<=n;i++){
		if(!vis[i])prime[++prime[0]]=i;
		for(ll j=1;j<=prime[0]&&i*prime[j]<=n;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)break; 
		}
	}
}
int main(){
	scanf("%lld%lld",&L,&R);//不知道为什么这里输入有问题,太大输不了
	Prime(50000);
	for(ll i=0;i<=R;i++)a[i]=0;
	for(ll i=1;i<=prime[0]&&prime[i]<=R;i++){
		//printf("%lld ",prime[i]);
		for(ll j=max(2LL,(L-1)/prime[i]+1);j*prime[i]<=R;j++){
			//printf("%lld ",j*prime[i]);
			a[j*prime[i]-L]=1;
		}
		//puts("");
	}
	ll sum=0;
	for(ll i=L;i<=R;i++){
		if(i==1)continue;
		if(a[i-L]==0)sum++;
	}
	printf("%lld",sum);
	return 0;
}

2023/3/7 13:40
加载中...