素数筛
1,标记一个范围内的数字是否是合数,没有被标记的则为素数
2,算法的空间复杂度为O(N),时间复杂度为O(N * loglogN)
3,总体思想是用素数去标记掉不是素数的数字,例如我知道i是素数,那么2i,3i,4i …就都不是素数
一句话:用素数标记合数
#include <stdio.h>
#include <inttypes.h>
#define MAX_N 100
int prime[MAX_N + 5];
void init() {
for (int i = 2; i <= MAX_N; i++) {
if (prime[i]) continue;
prime[++prime[0]] = i;
for (int j = i * i; j <= MAX_N; j += i) {
prime[j] = 1;
}
}
return;
}
int main() {
init();
for (int i = 1; i <= prime[0]; i++) {
printf("%d\n", prime[i]);
}
return 0;
}
1097

被折叠的 条评论
为什么被折叠?



