模版-线性筛素数

模版-线性筛素数

#include <cstdio>
#include <cstring>

const int Maxn = 100000005;

int isPrime[Maxn], Prime[1000005], cnt = 0;

void getPrime(int n) {
	isPrime[0] = isPrime[1] = true;
	for (int i = 2; i <= n; i++) {
		if (!isPrime[i]) {
			Prime[cnt++] = i;
		}
		for (int j = 0; j < cnt && Prime[j] * i <= n; j++) {
			isPrime[Prime[j] * i] = true;
			if (i % Prime[j] == 0) {
				break;
			}
		}
	}
}

int main() {
	int n;
	scanf("%d", &n);
	getPrime(n);
	for (int i = 0; i < cnt; i++) {
		printf("%d%c", Prime[i], " \n"[i == n - 1]);
	}
	printf("%d\n", cnt);

	return 0;
}

posted @ 2021-01-20 13:41  牟翔宇  阅读(58)  评论(0编辑  收藏  举报