60分求调!!!
  • 板块P1835 素数密度
  • 楼主xy_mc
  • 当前回复5
  • 已保存回复7
  • 发布时间2024/12/9 20:39
  • 上次更新2024/12/10 12:17:01
查看原帖
60分求调!!!
1304256
xy_mc楼主2024/12/9 20:39

#7.8.10.11 RE

请求dalao纠错

#include<bits/stdc++.h>
using namespace std;
const int M=50000;
int l,r,p,sum,b[50005];
bool a[1000005];
void prime(){     //质数筛 
	for(int i=2;i*i<=M;i++){
		if(!a[i]){
			for(int j=i*i;j<=M;j+=i){
				a[j]=true;
			} 
		}
	}
	for(int i=2;i<=M;i++){
		if(!a[i]){
			p++;
			b[p]=i;
		}
	}
}
void f(){    //选出大于r的最小质数在第几个 
	for(int i=1;i<=p;i++){
		if(b[i]>=r){
			p=i;
			break;
		}
	}
}
int main(){
	cin>>l>>r;
	prime();
	memset(a,0,sizeof(a));
	f();
	for(int i=1;i<=p;i++){
		int L;				 //
		if(b[i]>=l){		 //
			L=b[i]*2;        //
		}else{               //
			int x=l/b[i];    //
			L=(x+1)*b[i];	 // 
		}                    //算出大于l的最小的b[i]的倍数 
		for(int j=L;j<=r;j+=b[i]){
			a[j-l+1]=true;
		}					
	}
	for(int i=1;i<=r-l+1;i++){
		if(!a[i]){
			sum++;
		}
	}
	cout<<sum-1;
	return 0;
}
2024/12/9 20:39
加载中...