虽然过了,但太麻烦了,求给另一种方法(包关)
查看原帖
虽然过了,但太麻烦了,求给另一种方法(包关)
1138350
jiangyunrui楼主2024/10/27 20:13

太长了

#include<bits/stdc++.h>
#define maxn 100001
using namespace std;
int isprime[100001],prime[100001],cnt[100001],m;
inline int get_list(){register int tot=0;
	for(register int i=2;i<=maxn;i++){
		if(!isprime[i])prime[++tot]=i,cnt[tot]=cnt[tot-1]+i;
		for(register int j=1;j<=tot&&i*prime[j]<=maxn;j++){
			isprime[i*prime[j]]=1; 
			if(i%prime[j]==0)break; 
		}
	}
	return tot;
}
int main(){
	std::cin>>m;
	int ans=get_list(),ans_final;
	for(int i=1;i<=ans;++i){
		if(cnt[i]>m)break;
		cout<<prime[i]<<'\n';
		ans_final=i;
	}
	cout<<ans_final; 
	return 0;
}
2024/10/27 20:13
加载中...