为什么str数组范围只开50000,只有46分啊,开到100000就ac了
查看原帖
为什么str数组范围只开50000,只有46分啊,开到100000就ac了
431272
hyk2003楼主2021/8/13 18:17
# include <bits/stdc++.h>
using namespace std;
bool str[100000],arr[1000010];
long long l,r,num,L,R;
void prime()
{
	str[1] = 1;
	for(int i=2;i*i<=50010;i++){
		if(!str[i]){
			for(int j=i*i;j<=50010;j+=i){
				str[j] = 1;
			}
		}
	}
}
int main (){
	prime();
	cin >> l >> r;
	if(r <= 50000){
		for(int i=l;i<=r;i++){
			if(!str[i]) num++;
		}
		cout << num;
		return 0;
	}
	if(l <= 50000){
		for(int i=l;i<=50000;i++){
			if(!str[i]) num ++;
		}
		l = 50001;
	}
	for(int i=1;i<=50000;i++){
		if(!str[i]){
			L = l/i;
			R = r/i;
			for(int j=L;j<=R;j++){
				arr[i*j-l+1] = 1;
			}
		}
	}
	for(int i=1;i<=r-l+1;i++){
		if(!arr[i]) num ++;
	}
	cout << num;
	return 0;
}
2021/8/13 18:17
加载中...