社区讨论

一种几乎没有实用价值的筛素数算法

灌水区参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lx5pmrip
此快照首次捕获于
2024/06/08 14:04
2 年前
此快照最后确认于
2024/06/08 17:35
2 年前
查看原帖
时间复杂度约为 O(n nlnn)O(n\ \frac{n}{\ln n})
CPP
#include <bits/stdc++.h>
using namespace std;
vector<int> prime;
map<int,int> cnt;
bool flag = 1;
const int N=1e9;
int main(){
	auto start = clock();
	prime.push_back(2);
	cnt[2]=0;
	for(int i=3;i<=N;i++){
		flag = 1;
		for(int j:prime){
			cnt[j] = (cnt[j] + 1) % j;
			flag = flag & (cnt[j]!=0);	
			//printf("%d:cnt[%d]=%d\n",i,j,cnt[j]);
		}
		if(flag){
			prime.push_back(i);
			cnt[i] = 0;
			if(prime.size()%500==0) printf("find prime:%d cnt:%d sqrt:%d ln:%d use:%d\n", i,prime.size(),(int)sqrt(i),i/(int)log(i),double(clock()-start)/CLOCK_PRE);
		}
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...