欧拉筛求素数

忘了欧拉筛的写法了,拿出来重新理解下。

#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
*/ 

猜你喜欢

转载自blog.csdn.net/lengxuenong/article/details/79417923