素数筛——字如其名

【Python 百练成钢】Python语言解决素数筛选问题的几种方式【朴素素数筛、埃氏筛、欧拉筛】 如果数据规模较大就会很耗费时间。测试数据分别为新手筛 测试数据10^5 阶乘结果9592用时21.401952028274536s新手优化筛 测试数据10^6 阶乘结果78498用时3.4318480491638184s埃氏筛测试数据10^6 阶乘结果78498用时0.27430033683776855s测试数据10^7 阶乘结果664579用时2.836449384689331s欧拉筛测试数据10^6 阶乘结果78498 用时0.6881604194641113s。 阅读详情

问题引出

问题:请将1~10000中的所有素数打印出来。

解决此类问题有一个通用的办法——用一个神奇的筛子,将所有素数全部“筛”出来。

基本数学背景

任何合数都可以唯一分解成一组素数的积。例如:60 = 2 * 2 * 3 * 5

筛子种类

素数筛一般有两种:埃氏筛和欧拉筛。前者时间复杂度为O(nloglogn)(我也不知道为什么),后者时间复杂度为O(n)。

埃式筛

  • 核心思想

下列一串数中

2 3 4 5 6 7 8 9 10 11 12

2是素数,因此将2选出来放在一个专门装素数的数组中,并且将所有2的倍数的数全部“筛”掉。

2 3 4 5 6 7 8 9 10 11 12 (筛掉了4, 6, 8, 10, 12)

接下来,3并没有被“筛”掉,说明3是素数,将3选出来放在一个专门装素数的数组中,并且将所有3的倍数的数全部“筛”掉。

2 3 4 5 6 7 8 9 10 11 12(筛掉了9)

接下来,发现4已经被筛掉,直接进行下一步。

5没有被筛掉,说明5是素数,将5选出来放在一个专门装素数的数组中,并且将所有5的倍数的数全部“筛”掉。
.一直到最后一个数终止。这就是埃氏筛的思路。

  • 缺点

会出现重复筛选的过程,例如,10会被2筛掉,也会被5筛掉。12会被2筛掉,也会被3筛掉。

  • 代码如下
#include<iostream>
using namespace std;

const int N = 100010;
int pr[N], cnt;
bool st[N];

void GetPrimes(int n) {
    for (int i = 2; i < n; i++)
        if (!st[i]) {
            pr[cnt++] = i;
            for (int j = 1; i * j < n; j++)
                st[i * j] = true;
        }
}

int main() {
    int n;
    cin >> n;
    GetPrimes(n);
    for (int i = 0; i < cnt; i++)
        printf("%d ", pr[i]);
    return 0;
}

思维有点难度,以后再写

欧拉筛

#include<iostream>
using namespace std;

const int N = 100010;
int pr[N], cnt;
bool st[N];

void GetPrimes(int n) {
    for (int i = 2; i < n; i++) {
        if (!st[i]) pr[cnt++] = i;
        for (int j = 0; i * pr[j] < n; j++) {
            st[i * pr[j]] = true;
            if (i % pr[j] == 0) break;
        }
    }
}

int main() {
    int n;
    cin >> n;
    GetPrimes(n);
    for (int i = 0; i < cnt; i++)
        printf("%d ", pr[i]);
    return 0;
}

练习

输入2的每个质因数之和
输入3的每个质因数之和
。。。。。。
输入10000的每个质因数之和

STM32踩坑--NoST-LINK detected 这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ... 阅读详情

相关推荐

单机多环境部署apollo 2.3.0

理解apollo的整体架构后,对比nacos配置中心功能点,其设计的复杂度以及完整度相较nacos而言更为丰富 对于不同的环境,例如 FAT, PRO 在部署时进程已经完全物理隔离,并且每个环境config/adminservice依赖的数据也完全物理隔离(连接不同的db),在数据隔离与安全方面做的很完善,但同时也提升了架构的复杂度 而 portal 可以管理多个环境,单节点部署虽然有单点问题,但并不会影响业务从configservice读取配置, 挂掉只要重启就可以,只是在

Life is a starting point everywhere 1299

素数筛(彻底理解)

一.什么是素数 长话短说:因数只有1和本身的正整数,(但素数不包含1). 比如 2 ,3,5,7… 二.如何判断一个数是素数 用1中的定理,也就是说,如果某个大于1的正整数与任何小于等于它的正整数的最大公因数都是1,则为素数 咳咳咳…扯远了,我们的重心不在这里,重点在下面: 三.什么是素数筛 首先,给你一个区间的正整数,让你求在这段区间内有哪些素数? 这里,我们就可以用“筛选的方法”筛去不是素数的正整数(也就是合数)剩下的就是素数了,但不同的筛法效率也是不一样的 1. 最直接的筛法 获取1到n以内的所有素

YSJ367635984的博客 2万+

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 449

素数筛入门

这篇博客主要将素数筛的内容,朴素算法是大部分人最容易想到的方法,而埃氏筛和欧拉筛则需要了解,其中缩短时间复杂度的一系列优化算法很值得去细细品味,因为在竞赛方面很有帮助。

m0_74352735的博客 2034

HPC软件使用之ANSYS Fluent

本文介绍了如何在超级计算机上使用ANSYS Fluent进行科学计算和工程仿真。文章首先对Fluent软件进行了简要介绍,强调了其在计算流体力学领域的广泛应用和强大功能。接着,详细说明了如何编写jou脚本文件和slurm脚本文件,以控制Fluent的计算流程和作业提交。文章还提供了作业提交和查看的具体命令,并通过一个鼓风机仿真的案例演示了从网格模型准备、脚本编写、作业提交到结果查看的完整流程。最后,展示了使用Fluent进行结果可视化的方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 2212

KUKA 虚拟调试实战——打通Simpro4.1与OfficeLite8.6的通信与实时控制链路

本文详细介绍了KUKA虚拟调试实战,重点解析如何打通Simpro4.1与OfficeLite8.6的通信与实时控制链路。通过环境搭建、权限配置、机器人型号匹配等关键步骤,帮助工程师高效完成机器人轨迹规划和PLC联锁逻辑验证,大幅降低真机调试风险。文章还提供了典型报错解决方案和实时控制优化技巧,适用于工业机器人仿真与培训场景。

weixin_30907935的博客 451

素数//素数筛

枚举所有小于数,看是否它能整除其他自然数,但实际上只需要枚举根号次。 bool Is_prime(int n) { for(int i=1;i*i&lt;=n;++i) { if(n%i==0) return false; } return true; } •埃氏筛:做法其实很简单,首先将2到n范围内的整数写下来,其中2是最小的素数。将表中所有...

VUno)UKGzseI 1万+

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

weixin_70360261的博客 1448

素数筛(埃氏筛、欧拉筛)

那么对于任意的i>2,当我们遍历到i时,则我们一定先遍历了[2,i-1]之间的所有数,若isprime[i]为false,则证明i不是[2,i-1]中任意素数的倍数,即i只能被1和它自身整除,所以i为素数。若x∈[2,i-1],则x*i一定已经被标记为合数了,因为在遍历到i之前,我们一定已经遍历过x了,若x的最小质因数为k,k*y==x,则x的i倍即k的i*y倍若小于n则一定已经被标记过了。那么问题来了,如果我给你一个数字n,让你判断有多少个小于n的素数,...

m0_54123999的博客 4861

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2802

基于STC8G1K08A单片机的7位PWM输出程序(PCA功能实现呼吸灯效果)

摘要:本文展示了基于STC8G单片机的PWM占空比控制实现。通过定时器0中断每5ms调整占空比(0-127范围),实现呼吸灯效果。关键代码包括:1)PWM初始化(7位PWM模式);2)定时器配置(1ms中断);3)主循环根据标志位动态调整占空比。硬件采用P5.4引脚输出PWM信号,通过direction标志实现占空比自动增减循环。该方案适用于LED亮度调节等场景,系统时钟24MHz,采用12T模式。

weixin_74013772的博客 867

素数与素数筛

由于费马小定理的逆定理并不正确,对于卡迈克尔数即满足费马小定理的逆定理但是不为素数的数,虽然卡迈克尔数很少,在1~100000000范围内的整数中,只有255个卡迈克尔数,但是已经使他的效果落后于Miller-Rabin和Solovay-Strassen素性检验。欧拉筛(Euler's Sieve),也称为改进的埃拉托斯特尼筛法(埃式筛),是一种优化过的素数筛法,用于找出一定范围内的所有素数。例如i=5,2*5,3*5,4*5已经在前面i=2,3,4,5的时候筛选过了。第1个检查的是2,他说第一个素数;

a111737289291的博客 1515

把 ABAP Unit 测试放进本地类:让重构更安全、让测试更好找的组织方式

ABAP测试代码组织策略:单元测试与集成测试的合理存放位置 本文针对ABAP开发中测试代码组织混乱的问题,提出了一套系统化的解决方案: 单元测试应存放在被测类的本地测试include中(...CCAU或...T99),确保测试与代码同步演进且易于发现 跨对象测试(组件/集成/系统测试)应创建单独的全局测试类,并通过FOR TESTING和ABSTRACT进行防护 使用! @testing注释建立测试关系,使测试与被测对象明确关联,提高可发现性 针对不同技术栈(RAP/CAP/OData)提供了具体落地建议,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1730

素数判定和素数筛

素数(Prime number)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。素数的判定是数论中的一个重要问题。本文将回顾常用素数判定方法以及两种经典的素数筛法即埃拉托斯特尼(埃氏筛)和欧拉筛。

Reaearcher-Du 1247

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

算法篇——素数筛

埃氏筛、欧拉筛的讲解

lcx0128的博客 3119

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【总结】素数筛方法详解

    在讲素数筛方法之前,先了解相关知识点: 素数: 在大于1的自然数中,除了1和它本身以外不再有其他因数的数。 对于一个合数x,必有一个范围在2~√x 的因数。      素数筛方法主要有三种: 素数的判定(素数筛) 普通线性筛(埃氏筛法 / 埃拉托斯特尼筛 / Eratosthenes素数筛) 优...

360°顺滑 2145

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

筛素数 (埃氏筛和欧拉筛)

质数(素数)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。—“素数百度百科。

2503_91005718的博客 698

【模板】线性筛素数(埃筛+欧筛)

本来想自己写一篇的,但是找埃筛的代码时找到了一篇不错的题解,修改了一点内容,原作者的洛谷ID为 dormantbs

Build 3713

素数的欧拉筛

合数必定能被分解为质因数//原因:假如有一个合数,那么它必定拥有因数,如果因数有一个为合数,那么该合数一定能继续分解为两个因数相乘,直到分解到不可以再分解为止.因此合数一定可以分解为一个比他小的质数乘一个比他小的数字.即分解到一个质数和一个比他小的数字相乘,那么如果我们在遍历数字时,(从2,3,4等等)去掉这个数字之前的质数的倍数,那么必定可以在遍历到合数之前筛掉该合数.在大于1的数的范围内,那么如果我们要找质数,那么只需要找到合数,然后将合数去掉,那么便只有质数.,分别表示查询的范围和查询的个数。

2301_80096362的博客 953

GO-素数筛

素数筛 文章目录素数筛1、素数2、Code 1、素数 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 素数筛 a. 首先生成一个自然数序列 b. 为每一个素数构造一个筛子,过滤输入序列的是素数倍数的数, 并返回新的序列 素数筛虽然是一种优雅的并发程序结构, 但因为每个并发体处理任务的粒度太细微, 程序的整体性能不是理想。 对于细粒度的并发程序, CSP模型中固有的消息传递代价太高 2、Code package main import "fmt" // GenerateNatura

SinkRain 2万+

素数筛总结

素数筛1. 基本素数筛2. 线性筛3. 欧拉筛参考材料 1. 基本素数筛 2. 线性筛 3. 欧拉筛 参考材料

wodongx123的博客 874

C/C++ 素数筛 ACM算法

原始方法(试除法) 最原始的素数判断方法 思路很简单,就是暴力从 2 一直除到 n-1 能被整除就是合数,否则就是素数 Code: int isPrime(int n) { if(n==1)return 0; for(int i=2;i<n;i++) { if(n%i==0)return 0; } return 1; } 问题: 十分暴力,耗时过长,TLE 致死 原...

果光的博客 2984

素数筛模板

在判定素数的问题中,随着不断学习,里面的拓展性也在不断地增加。 问题:判定一个数是否为素数: 想都不想的方法: static boolean isprime(int value){ for(int i=2;i( 3)数组尾],6,9,12 * * 不是素数 4: [i=4]不是素数,跳过 5: . . . . . . . . . . . . 这个到除了前面几次的计算量多一点,到后面...

bigsai 3436

素数筛

素数晒素数定义素数判断1、朴素判断(遍历找因数)2、改进朴素判断(砍半遍历找因数)3、埃氏素数筛(构造素数表)4、欧拉筛 素数定义 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 素数判断 判断关键是找出它所有的因数。判断一个数m是素数还是合数可以有以下的方法。 1、朴素判断(遍历找因数) 排除,只看大于等于2的整数,其他都是非素数也非合数。 将2到m-1的数全部拿出来和...

weixin_44385465的博客 608

素数筛详解

素数筛合集 原始、暴力,时间复杂度O(n*sqrt(n)) bool isprime(int n){ int i; for (i = 2; i <= sqrt(n); i++) if (n % i == 0) return false; return true; } 一般筛法:时间复杂度O(nloglogn) const int maxn = 100; bool numbe...

Ember_Sky 1463

基础数论之素数筛【C++算法竞赛】

教学相长,回忆一下数论有什么作用

qq_58249029的博客 872
上一篇: 二分法
下一篇: 汇编写算法
晓龙coding
博客等级 码龄7年 211粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值