news 2026/7/7 20:08:34

质数筛-欧拉筛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
质数筛-欧拉筛

对于正常的程序要求,埃氏筛的速度已经是相当不错了,但是在某些极端条件下,埃氏筛的速度可能还不够,这个时候我们就要用到欧拉筛了

思路

埃氏筛存在一个非常严重的缺陷,那就是它会对一个数据进行反复筛选,比如:

6 = 2 * 3

6 = 3 * 2

可以发现,对于 6 这个非质数,我们进行了两次筛选,而对于后面跟大的数来说,可能被筛的次数会更多,这个时候就会对我们筛法的效率产生影响。而欧拉筛法可以避免无效的筛选。

我们发现,对于每个非质数,都会存在唯一的最小质因子

于是我们便可以让每个和数只在它最小质因子与对应因数相乘时才被标记为合数,这样我们就只筛了一次。例如:

6 = 2 * 3 //标记 6

6 = 3 * 2 //已经标记过,便不再标记

核心思想:从第一个质数开始,一个个排除,不做无效的筛选。

人话:从前向后走,边走边乘,乘出来的数就是合数

代码实现

#include<iostream> #include<cstring> using namespace std; const int N = 1e5; int primes[N]; //存储质数 int flag[N]; //标记是质数还是合数,如果是质数为 0 ,开始假设全是质数 int main(){ int n; cin >> n; int pos = 0; for(int i = 2 ; i <= n ; i++){ if(flag[i] == 0){ //如果是质数 primes[pos++] = i; //存储质数 for(int j = 0 ; j < pos && i * primes[j] <= n ; j++){ flag[primes[j] * i] = 1;//标记为合数 } }else{ //如果是合数 for(int j = 0 ; j < pos && primes[j] * i <= n ; j++){ flag[primes[j] * i] = 1;//标记为合数 if(i % primes[j] == 0) break; //如果可以整除说明发现了最小质因子,退出循环 } } } for(int i = 0 ; i < pos ; i++){ cout << primes[i] << ' '; } cout << endl; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 16:00:53

Linly-Talker能否接入铁路12306客服系统?

Linly-Talker能否接入铁路12306客服系统&#xff1f; 在春运高峰期间&#xff0c;铁路12306的客服热线常常因瞬时并发量激增而陷入“占线—等待—挂断”的恶性循环。用户拨打数十次才能接通&#xff0c;人工坐席疲于应对重复性问题&#xff0c;大量资源被消耗在“余票查询”“改…

作者头像 李华
网站建设 2026/7/6 22:22:47

50、Windows Embedded Compact 7 中 USB 相机应用全解析

Windows Embedded Compact 7 中 USB 相机应用全解析 1. 多媒体基础架构概述 Windows Embedded Compact 7 配备了名为 DirectShow 的通用多媒体基础架构,它是一个可扩展的媒体渲染软件框架。DirectShow 基础架构的基本元素是媒体过滤器,分为源(Sources)、转换(Transforms…

作者头像 李华
网站建设 2026/7/7 19:12:56

51、嵌入式设备开发:USB 摄像头、网络投影仪与 Phidgets 设备应用

嵌入式设备开发:USB 摄像头、网络投影仪与 Phidgets 设备应用 在嵌入式设备开发领域,USB 摄像头、Windows 网络投影仪以及 Phidgets 设备的应用为开发者带来了更多可能性。下面将详细介绍这些设备的开发与应用。 USB 摄像头应用 USB 摄像头在嵌入式设备中应用广泛,以下是…

作者头像 李华
网站建设 2026/7/7 4:49:43

52、Compact 7 RFID 阅读器与 FTDI 设备开发指南

Compact 7 RFID 阅读器与 FTDI 设备开发指南 1. 开发 Compact 7 RFID 阅读器应用 在开发 Compact 7 RFID 阅读器应用时,我们可以借助 eBox - 3310A 作为目标设备,它具备支持 Compact 7 的板级支持包(BSP),再结合 Phidget RFID 阅读器模块,该模块有支持 Compact 7 的设备…

作者头像 李华
网站建设 2026/7/7 7:12:54

54、第三方FTDI应用模块与自定义流驱动开发

第三方FTDI应用模块与自定义流驱动开发 1. 第三方FTDI应用模块概述 FTDI第三方模块可扩展系统功能,只需将模块插入系统的USB主机端口,并安装FTDI驱动,即可通过编程访问模块功能。以下是一些代表性模块: | 图编号 | 模块 | 描述 | 来源 | | — | — | — | — | | 44 - …

作者头像 李华
网站建设 2026/7/7 4:17:12

Linly-Talker在社区医院健康宣教中的实践

Linly-Talker在社区医院健康宣教中的实践 在社区医院的候诊区&#xff0c;一位老年患者正对着屏幕上的“张医生”提问&#xff1a;“我血糖高&#xff0c;能吃香蕉吗&#xff1f;” 屏幕中的数字人微微前倾身体&#xff0c;语气温和地回答&#xff1a;“香蕉含糖量较高&#xf…

作者头像 李华