忘了欧拉筛的写法了,拿出来重新理解下。
#include<cstdio>
#include<cstring>
#define MAXL 1200
#include<iostream>
using namespace std;
int prime[MAXL];
int isnot_pr[MAXL];
int work() {
int tot = 0;
for (int i = 2; i < MAXL; ++i) {
if (!isnot_pr[i])prime[tot++] = i;
for (int j = 0; j < tot; ++j) {
if (i * prime[j] > MAXL) break;
isnot_pr[i*prime[j]] = 1;
if (i % prime[j] == 0) break;
//比如i=2时候筛到4就不筛了,那6什么时候筛的呢?i=3时候,8呢?i=4时候。
//这个数分解质因数,他总是被自己最小的质因数筛掉。
//i是质数时候的筛到自己的平方数或者边界
//i是合数时候筛到自己 质数表内自己的最小质因数或者边界
}
cout<<endl;
}
}
int main() {
work();
}
/*
2: 4
3: 6 9
4: 8
5: 10 15 25
6: 12
7: 14 21 35 49
8: 16
9: 18 27
10: 20
11: 22 33 55 77 121
12: 24
13: 26 39 65 91 143 169
14: 28
15: 30 45
16: 32
17: 34 51 85 119 187 221 289
18: 36
19: 38 57 95 133 209 247 323 361
20: 40
21: 42 63
22: 44
23: 46 69 115 161 253 299 391 437 529
24: 48
25: 50 75 125
26: 52
27: 54 81
28: 56
29: 58 87 145 203 319 377 493 551 667 841
30: 60
31: 62 93 155 217 341 403 527 589 713 899 961
32: 64
33: 66 99
34: 68
35: 70 105 175
*/