欧拉筛求素数

本文详细介绍了欧拉筛法的实现原理与代码实现过程。通过具体示例展示了如何使用欧拉筛法高效地找出一定范围内的所有质数,并解释了其背后的数学逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值