全MLE求助!
  • 板块P3912 素数个数
  • 楼主lzh009
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/25 15:14
  • 上次更新2023/11/3 01:17:58
查看原帖
全MLE求助!
952814
lzh009楼主2023/8/25 15:14
#include<bits/stdc++.h>

using namespace std;

int isprime[100000001],prime[100000001];
void Euler_sieve(int n){
	memset(isprime,true,sizeof(isprime));
	prime[0]=0; //记录当前素数个数 ;
	for(int i=2;i<=n;i++){
		if(isprime[i]) prime[++prime[0]]=i; //把素数保存到素数表 prime中,并更新素数个数 ;
		for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
			isprime[i*prime[j]]=false; //筛除i*prime[j]; 
			if(i&prime[j]==0) break; //当i中含有素因子prime[j] 时中断循环,确保每个数 只被它的最小素因子筛除 
		}
	}
}
int a,b;
int main(){
	cin>>a;
	Euler_sieve(a); 
	//for(int i=1;i<=a;i++){ 测试 
	//	cout<<isprime[i]<<" ";
	//}	
	//cout<<endl; 
	
	//for(int i=1;i<=prime[0];i++){
	//	cout<<prime[i]<<" ";
	//}
	
	cout<<prime[0]<<endl;
	return 0;
}

之前写过欧拉筛模板,懒得做这道题,结果照搬上来全MLE了……

2023/8/25 15:14
加载中...