news 2026/4/23 13:35:17

质数筛-欧拉筛

作者头像

张小明

前端开发工程师

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/4/23 11:28:22

55、嵌入式系统开发:FTDI设备与托管代码集成

嵌入式系统开发:FTDI设备与托管代码集成 1. FTDI设备相关 FTDI USB转串口设备及模块在开发中具有重要作用。以下是一段用于测试应用命令的代码片段: Sleep(1000); successIOCTL = DeviceIoControl(hStr,IOCTL_FTDIModules_SETBIT,NULL,Bit,NULL, 0,&dwWritten,NULL)…

作者头像 李华
网站建设 2026/4/20 20:34:35

11、DHCP高级配置与DHCPv6使用指南

DHCP高级配置与DHCPv6使用指南 1. DHCP中继过程 大多数商用路由器可配置为DHCP中继代理,这样就无需在每个子网中都将Windows服务器配置为中继代理。DHCP中继过程的详细步骤如下: 1. 与DHCP中继代理位于同一子网的客户端发送DHCPDISCOVER广播,请求IP地址。 2. 中继代理将…

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

Linly-Talker表情库包含多少种基本情绪?

Linly-Talker表情库包含多少种基本情绪&#xff1f; 在数字人技术迅速普及的今天&#xff0c;一个关键问题始终萦绕在开发者和内容创作者心头&#xff1a;如何让虚拟形象真正“有血有肉”&#xff1f; 答案或许就藏在一个看似简单的功能背后——表情。Linly-Talker作为近年来备…

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

洛谷 B4065:[GESP202412 二级] 数位和 ← 字符串

【题目来源】 https://www.luogu.com.cn/problem/B4065 【题目描述】 小杨有 n 个正整数&#xff0c;小杨想知道这些正整数的数位和中最大值是多少。“数位和”指的是一个数字中所有数位的和。例如:对于数字 12345&#xff0c;它的各个数位分别是 1,2,3,4,5。将这些数位相加&a…

作者头像 李华
网站建设 2026/4/23 12:16:55

职场高效摸鱼学习助手,核心功能,导入学习资料,文字,音频,自动拆分成五到十分钟片段,界面伪装成工作报表,点击隐藏学习瞬间到工作界面,记录学习,支持后台播放音频,跳过重复内容,避免上班被领导发现。

职场高效学习助手&#xff08;碎片时间学习系统&#xff09;一、核心代码&#xff08;模块化设计&#xff09;1. 配置文件&#xff08;"config.py"&#xff09;集中管理系统参数与伪装界面内容。# 配置模块&#xff1a;系统常量与伪装界面模板import osclass Config:…

作者头像 李华
网站建设 2026/4/23 8:44:16

Ring-flash-2.0:6.1B激活MoE模型推理破百B性能

Ring-flash-2.0&#xff1a;6.1B激活MoE模型推理破百B性能 【免费下载链接】Ring-flash-2.0 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ring-flash-2.0 近日&#xff0c;inclusionAI正式开源高性能思维模型Ring-flash-2.0&#xff0c;该模型基于MoE&am…

作者头像 李华