素数筛算法与素数打表[数学]

人工势场法三大致命缺陷?我用ROS+Gazebo做了组对比实验 本文通过ROS与Gazebo仿真实验,深入剖析了人工势场法(APF)在机器人路径规划中的三大经典问题:局部最小值、目标不可达和路径震荡。文章不仅复现了这些缺陷,还对比测试了虚拟目标点法、改进斥力场及运动平滑等主流改进方案,为工程选型提供了基于数据的实用建议。 阅读详情

素数,即质数,是很常见的问题,如何判断一个数是不是质数,如何求出一个区间内的所有质数,是很常见的问题。

因数只有1和它本身的数是质数。其中1不属于质数和合数。根据定义,我们就可以直接判断一个数字n是否是素数。从2开始,迭代到sqrt(n)。

这样得到求一个数是不是质数的时间复杂度是O(n^1/2),得到一个1到n区间内所有质数的复杂度就是O(n^3/2)。

在求解问题时,为了通过预运算,简化时间复杂度,我们常通过打表的方式,将数值预先计算出来,然后直接存储到数组,素数表就是常用的打表方法。


所以我们关心如何求得n范围内所有的质数。

素数筛:

先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛法”,简称“筛法”。

其中存在一些点:

#define Max 1000000  
bool prime[Max];  
void IsPrime(){  
     prime[0]=prime[1]=0;prime[2]=1;  
     for(int i=3;i<max;i++)  
        prime[i]=i%2==0?0:1;  //首先将2的倍数全部筛掉
     int t=(int)sqrt(Max);  
     for(int i=3;i<=t;i++)  
       if(prime[i])  //没有被筛掉,即i是质数
         for(int j=i*i;j<Max;j+=2*i)//一个数j如果能表示成一个数的倍数,则一定不是质数,j+=2*i保证了不是偶数,省去了重复计算。  
            prime[j]=0;  
}  

相比上面,有更快速的实现方法:(避免了重复筛同一个数)
//prime[]存储了小于n的素数,下标从1开始  
//visit[]数组标记了是否为素数,bool类型  
//返回值num表示小于n的素数的个数  
ll prime[maxn];  
bool visit[maxn];  
ll init_prim(ll n)  
{  
    memset(visit, true, sizeof(visit));  
    ll num = 0;  
    for (ll i = 2; i <= n; ++i)  
    {  
        if (visit[i] == true)  
        {  
        num++;  
        prime[num] = i;  
        }  
        for (ll j = 1; ((j <= num) && (i * prime[j] <= n)); ++j)  
        {  
            visit[i * prime[j]] = false;  
            if (i % prime[j] == 0) break; //点睛之笔  
        }  
    }  
    return num;//返回质数个数  
}  
通过整体一次遍历,利用已经判断出来的素数进行筛除,通过合数判断进行了剪枝重复。实现了几乎线性的素数筛法。



【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】 这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就. 阅读详情

相关推荐

HR离职预测模型实战:可解释、可干预、可落地的三层架构

员工离职预测本质上是组织健康度的早期诊断技术,其核心原理在于从行为、心理与结构数据中识别稳定性衰减信号。该技术的价值不仅在于提升预测准确率,更在于将模糊的‘人才风险’转化为可归因、可干预的具体因子,如工龄阶段、满意度落差、薪酬分位数等。典型应用场景覆盖HRBP主动留任、业务部门梯队预警及HRIS系统智能升级。本文聚焦于构建具备业务可解释性与操作闭环能力的离职预警模型,深度融合HR工作流与机器学习工程实践,尤其强调逻辑回归基线、特征业务化重构及三层递进式架构设计。

赵士杰的博客 385

质数打表-(三种方法)

1. 简单质数打表-复杂度:O(n*sqrt(n)) 分析 所有可能的因数全部试一遍 const int maxn=1e6+5; int prime[maxn]; void p1() { int cnt=0; for(int i=2;i<maxn;i++) { int falg=1; for (int j=2;j<=sqrt(i);j++) if...

江湖不信眼泪 1285

别再傻傻分不清了!STM32定时器里Prescaler和ClockDivision到底有啥区别?

本文深入解析STM32定时器中Prescaler和ClockDivision的区别与应用场景。Prescaler作为定时器的'心跳调节器',决定计数频率;而ClockDivision则是输入捕获的'抗噪滤镜',有效抑制高频噪声。通过实战案例和示波器实测数据,帮助开发者避免常见配置误区,提升嵌入式系统稳定性。

weixin_29193259的博客 317

素数——求正整数 l - r 中素数的个数

打印素数 1. 素数定义 素数(prime number)又称质数,有无限个。 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 2.方法 假设 x 是素数,那么 x 的倍数 2x,3x,4x,5x…. 将全部都是素数。依次内推,可以将所有的素数找出 定义一个一维数组,用于存储素数,数组的大小为 int [] array = new int[r+1]; 计算的时候,需要...

HuanChan的博客 2186

Android汽车服务篇(一) CarService

本文主要说明了CarService这一系统服务的启动流程,以及一些关键成员的创建和初始化流程.同时简单介绍了一下客户端是如何获取和使用CarService对象, 如上文介绍的, CarService对象只是获取各个Manager的媒介,它本身并不承担管理传感器.空调等具体的任务.如果要获取车辆的相关信息,如车速, 车内空调温度,诊断信息, 或对车辆进行相关的控制,如升高和降低空调温度,控制座椅和车窗, 调节音量等,就要通过具体的Manager中的API和对应的服务来实现了.

u012514113的专栏 8145

开发板的使用

一、开发板使用学习大纲。 1、开发板组成、核心板资源,底板资源。 2、开发板连接、调试工具、串口参数配置。 3、开发板启动过程。 4、文件传输 1)使用串口传输。 上传/下载 2)使用网口传输。 上传/下载 5、临时/永久配置开发板IP地址。 6、开发板启动脚本。 二、开发板的组成。 核心板: CPU处理器: 芯片:S5P6818(三星) 内核: ARM cortex-A53 -> 八核处理器 运行内存:512MB*2=1G nandflash:4G 底板: 电源线:5V 串口...

qq_45633736的博客 2658

打表法判断素数 c语言,判断素数的方法(素数打表)

素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。1.傻瓜解法根据素数的定义来尝试这个数是否有除了1和它本身以外的因数。如果有则不是素数,否则该数为素数。//判断某个数是否为素数int i,n;while(scanf("%d",&n)!=EOF){for(i=2;iif(n%i==0) break;if(i==n) printf("YES\n");else printf("N...

weixin_34588509的博客 396

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1071

素数筛(彻底理解)

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

YSJ367635984的博客 2万+

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4436

【深度学习新浪潮】气候预测模型的研发进展一览(2025年版)

模型类型核心优势适用场景不足ARIMA(统计模型)简单高效、可解释性强短期单变量预测非线性、长时依赖建模差随机森林(机器学习)多特征融合、抗噪声中短期多因素预测空间相关性、时序趋势捕捉弱LSTM(深度学习)长时依赖建模、端到端中长期时序预测物理一致性差、数据需求量大物理知情AI物理规律约束、高可靠性极端天气、长期气候变化模型复杂、计算成本高。

专注:太空算力、AI infra、异构调度、大模型成本工程 527

算法篇——素数筛

埃氏筛、欧拉筛的讲解

lcx0128的博客 3118

YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

本文记录的是改进YOLOv11的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑与之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-IoU提出了一种关注边界框本身形状和尺度的边界框回归方法。

Limiiiing的博客 4593

F - Goldbach`s Conjecture LightOJ - 1259(素数筛)

F - Goldbach`s Conjecture LightOJ - 1259 题目链接:https://vjudge.net/contest/70017#problem/F 题目: Goldbach's conjecture is one of the oldest unsolved problems in number theory and in all of mathem...

weixin_30258901的博客 96

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

素数筛c++

素数筛 #include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;cstdio&amp;amp;gt; #include&amp;amp;lt;cstring&amp;amp;gt; #include&amp;amp;lt;algorithm&amp;amp;gt; using namespace std; const int MA=1005; int prime[M

qq_43367952的博客 441

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PAT 甲级1059 Prime Factors

1.问题描述: 题目意思是给定一个整型范围内的n求出这个n能够分解的质因数,若某一个质因子的分解个数超过一个那么使用^次方表示,比如4 = 2 * 2就要写成4 = 2 ^ 2.这样的形式。 2.算法分析: 其实这一道题目是一道纯数学知识题,首先我们要理解质因子,质数就是素数,我们需要先用线性筛筛出一定范围的素数,打个表。这里给出埃式筛法,时间复杂度为O(nlogn) #include &lt;...

ly's Blog 595

VC中sqlite的使用

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

UVa12716 gcd等于xor(打表+类素数筛+差分约束)

转载,写的不错

qq_42835440的博客 229

HDU - 4548-美素数 (欧拉素数筛+打表)

小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。   问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。   给定一个区间,你能计算出这个区间内有多少个美素数吗? Input 第一行输入一个正整数T,表示总共...

weixin_30325487的博客 75

素数判断方法总结

今天想总结一下素数的几种求法 暴力方法: 最简单的方法就是从2开始循环到n,如果没有一个数能被n整除就是素数 #include<stdio.h> int isPrime(int n) { for(int i=2; i<n; i++) { if(n%i == 0) return 0 ; } return 1 ; } i...

打代码的小明的博客 891

问题 T: 【动态规划】质数和分解

第二天叫醒我的不是闹钟,是梦想! 题目描述 任何大于1的自然数n,都可以写成若干个大于等于2且小于等于n的质数之和的形式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9的质数和表达式就有四种本质不同的形式:9=2+5+2=2+3+2+2=3+3+3=2+7。 这里所谓两个本质相同的表达式,是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达...

qq_43690454的博客 294

素数高效打表法(欧拉筛选法)

主要原理还是因为一个素数的倍数一定就不是素数了,所以break是最快速的方法了。欧拉筛选法的时间复杂度仅仅为O(n)。 代码: /* 遇到素数需要打表时,先估算素数的个数: num = n / lnx; num为大概数字,越大误差越小(只是估计,用于估算素数表数组大小) 这个打表法效率貌似很高,网上说几乎达到了线性时间(不知道是真是假=。=) */ #include<iostre...

CarreLiu 1381

SCUT - 142 - 第n个素数

https://scut.online/p/142 但是洲阁筛打表还是超时了,打的表不够长吧,在51nod上面要跑5s。要是快10倍得要密1000倍,根本打不出来(时间意义)。 暴力check要找的质数是不是要的那个。 #include<bits/stdc++.h> typedef long long ll; using namespace std; const int M...

weixin_30664051的博客 113

LightOJ 1370

 给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和   首先这道题如果一次一次的寻找估计会炸掉,所以我们可以直接进行欧拉数筛 和素数筛很像,我们知道每个数的欧拉数 = x * ( 1 - 1/pi ) .... 那么如果遇到一个素数 我们直接向上遍历,在进行素数筛的同时更新一下上方的所有数的欧拉数,这样实现1e6数据范围内的数打表应该不会超时,之后由于这...

qq_40924940的博客 433

欧拉函数

欧拉函数!~ 直接求法: long long phi(long long x) { int res = x; for(int i=2;i*i<=x;i++) { if(x%i==0) { res = res/i*(i-1); while(x%i==0) ...

嵩韵儿 204

poj 3048 Max Factor(素数筛)

  这题就是先写个素数筛,存到prime里,之后遍历就好,取余,看是否等于0,如果等于0就更新,感觉自己说的不明白,引用下别人的话吧:   素数打表,找出20000之前的所有素数,存入prime数组,对于每个输入的数a,从prime数组最后一个数往前判断,如果a % prime[当前序号]== 0,那么将该素数就是输入数据a的最大素因子,找出所有输入数据的最大素因子,找出最大的那个对应的数据a即...

weixin_30251829的博客 151

1059 Prime Factors

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p ​1 ​​ ​k ​1 ​​ ​​ ×p ​2 ​​ ​k ​2 ​​ ​​ ×⋯×p ​m ​​ ​k ​m ​​ ​​ . Input Specification:...

weixin_44270812的博客 183
上一篇: 761E Dasha and Puzzle[dfs][思维]
下一篇: HUD1175 连连看 [dfs剪枝]
Qer_
博客等级 码龄11年 34粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值