- 素数筛
/*************************************************************************
> File Name: main.cpp
> Author:
> Mail:
> Created Time: Tue 27 Oct 2020 01:40:12 PM CST
************************************************************************/
#include <stdio.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 <= MAX_N; i++) {
printf("%d: %d\n", i, prime[i]);
}
return 0;
}
- 线性素数筛
/*************************************************************************
> File Name: main.cpp
> Author:
> Mail:
> Created Time: Tue 27 Oct 2020 02:00:58 PM CST
************************************************************************/
#include <stdio.h>
#define MAX_N 100
int prime[MAX_N + 5];
void init() {
for (int i = 2; i <= MAX_N; i++) {
if (!prime[i]) prime[++prime[0]] = i;
for (int j = 1; j <= prime[0]; j++) {
if (prime[j] * i > MAX_N) break;
prime[prime[j] * i] = +1;
if (i % prime[j] == 0) break;
}
}
}
int main() {
init();
for (int i = 1; i < 100; i++) {
printf("%d : %d\n", i, prime[i]);
}
return 0;
}