质数的最快求法

C++高效的质数的判断(2种方法) 前提准备 在开始质数的讨论之前,我们先预备一下: 质数的定义:若一个正整数除了1和它自身之外不能被任何自然数整除,则该数称为质数,也叫素数。否则为合数。 由定义可知,所有小于等于1的数既不是质数,也不是合数。 质数的分布较为稀疏,对于一个足够大的数S,不超过S的质数大约有个,也就是说每InN个数约有一个质数,这点读者了解即可。 阅读详情

在半年前我写了个质数的筛法。测试时间复杂度是3.3*n而实际上老师的筛法是1.8倍的N当时他的算法我没看懂,老师过多的使用了乘法。而实际上乘法的效率是很低的。今天看懂了。

我室友写了个筛法。

 

 

这个是我们之前写的地址http://student.youkuaiyun.com/space.php?uid=28533&do=blog&id=1089。

我和老师的代码都是冗余在第三层。如果3的倍数干掉那么3*7*5是倍干掉的。但是到了5这里5*3*7又被干掉了一次。这样就造成了冗余。而实际上我是在做乘法的时候只是如果15(被干掉)

我的筛法也有这方面的因素。我的筛的冗余实在第三层。是相邻的比较。相邻的比较是N*N的复杂度固有的特征。如果第三层的是false那么就不去乘以。就继续。这样还是有冗余。去掉的最好方式就是不存在。我的代码第三层如果使用链表解决应该时间复杂度趋近于这个数值。下次测试一下。

 

Code:
  1. # include<stdio.h>  
  2. # include<math.h>  
  3. # define N 200000000  
  4. bool prime[N+1];  
  5. int main()  
  6. {  int i,j;  
  7. long ljq=0;   //记录筛选的次数  
  8. int cout=1; //记录质数的个数 2走后门, 故初值应设为一  
  9. int m=0;//记录i的值,为循环变量的辅助变量  
  10. for(i=3;i<=N;i=i+2)//所有的偶数全部干掉  
  11. prime[i]=true;  
  12. for(i=3;i<=sqrt((N-1));i=i+2)//第一层取平方数  
  13. {     
  14.     //printf("i=%d/n",i);  
  15.      m=i;  
  16.      ljq++; 
  17.     if(prime[i]==true)    
  18.            
  19.         for(j=i*i;j<=N;j=i*m)//筛法的第二层。从平方开始如果是存在的就筛掉  
  20.         {  
  21.                 m=m+2;  
  22.             if(prime[j]==true)  
  23.             {  
  24.                 prime[j]=false;  
  25.         //      printf("%d/t",j);//测试用例。用于查看筛掉的数  
  26.             }  
  27.         }//第二层结束  
  28. //printf(   "/n");//测试用例。用于分割筛掉的数。分割间的数之间有相同的差  
  29.   
  30.     }//第一层结束  
  31.   
  32. //printf("/n");  
  33.   
  34. printf("%d/t",2);   /*2非奇数故未在循环算法之内,但2是素数,故先输出*/  
  35. //打印质数  
  36. for(i=3;i<=N;i=i+2)   
  37. if(prime[i]==true)  
  38. {  
  39. printf("%d/t",i);  
  40. cout++;  
  41. }  
  42. printf("/n");  
  43. printf("步长%d",ljq);  
  44. printf("/n");  
  45. printf("质数的个数%d",cout);  
  46.   
  47. return 0;  
  48. } 

计算的是2亿的步长196457228两亿的6秒钟。比老师的快了一秒。

不包括打印时间。

时间复杂度不详

最快素数算法(绝非线性筛选)1.6秒算出1亿内所有素数 革命性素数算法:计算1亿内素数只要1.6秒 算法基本跟之前发的C#版相同(http://download.youkuaiyun.com/source/690005内有算法描述),由我的朋友杨力2年前设计,时间复杂O(n)。我对其进行了革命性的数据结构改进,空间复杂度从2个O(n)降低到1/6个O(n),程序的算法描述更加简洁,改用C++实现,我认为算法效率已经达到了素数算法的极限。 注:创建的内存大小不要超过内存,否则效率下降 立即下载

相关推荐

微信小程序音视频通话(for硬件)授权与设备注册实战指南

本文详细介绍了微信小程序音视频通话(for硬件)组件的开发实践,涵盖授权流程、设备注册与VoIP插件集成。重点解析了如何通过服务端获取snTicket实现用户授权,确保硬件设备与微信端的音视频通话安全可靠,适用于智能门禁、话机等物联网场景。

u6v7w8x的博客 945

最快求素数(质数)详解

我们经常会遇见一些题 要求我们判断一个数是否为素数(质数) 博主在这里讲解一种最快求素数的方法 能大量节约你的运行代码所花费的时间 废话不多说 我们先来了解一下素数的定义: 只能被常数1或自己整除,不能被其他整数整除的正整数。 我在这里先列举出100个数字里面的素数 大家先观察一下有什么规律 #include<stdio.h> #include<math.h> #include<iostream> using namespace std; bool s

weixin_60536621的博客 3920

Node框架之NestJS入门学习

文章主要分为三部分:1 NestJS 与Egg对比2 NestJS 基础知识介绍3 使用NestJS快速搭建应用,实现CURD操作e-link文档Egg官网NestJS 官网NestJS中文文档(非官方)

十九万里的博客 4742

尼尧的算法日记:如何高效的找出 素数/质数

都说不会算法的只能算是个CRUD工具人,而学会算法,不仅能提高解题思路,培养逻辑思维,也是提高自己的必经之路。 况且要去中大型公司,笔试总免不了手撕算法题。 本系列将把自己解题的过程和思路记录下来,也是提高自己算法能力的一种方式。 尼尧的算法日记:素数/质数什么是素数/质数解题思路暴力解法(试除法)优化一优化二优化三筛法筛法优化 什么是素数/质数 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数,比1大但不是素数

尼尧Nier的博客 869

KEPServerEX中,别名映射(Alias Mapping)数据标签重命名机制

目录核心机制应用场景配置步骤技术特性与参考内容的差异KEPServerEX中,别名映射(Alias Mapping) 是一种数据标签重命名机制,主要用于简化复杂标签路径的调用或实现跨系统兼容。其核心逻辑和功能如下:路径抽象 将设备层级结构中的完整标签路径(如 Channel1.Device1.Tag1)映射为简短别名(如 TempSensor1),降低客户端调用的复杂度。动态绑定 别名与实际标签实时关联,数据更新和读写操作通过别名直接传递到底层物理标签,无需修改客户端配置。多对一映射支持多个别名指向

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 1591

把业务变化变成实时流动:SAP Event Mesh 的概念、能力与落地方法

SAP Event Mesh 是 SAP BTP 上的云消息与事件服务,通过异步事件通信实现系统解耦。核心功能包括:1)提供Topic(广播)和Queue(持久化)两种消息模式;2)支持AMQP、MQTT、REST等多种协议接入;3)作为SAP生态的事件枢纽,可与SAP Integration Suite、CAP框架等无缝集成。典型应用场景:S/4HANA业务事件驱动流程、微服务扩展、IoT设备数据上云等。相比同步调用,它能显著提升系统弹性,避免雪崩故障,特别适合需要实时性与松耦合的企业级集成。高级版本(A

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

快速求得范围内质数(算法)

设置一张表(动态数组),用来记录一定范围内的数是否为质数,本方法的主要思想是在一定范围内分别标记2、3、5、7......的倍数(2,3,4......),被标记的数则不是质数,最后那目标范围和表比对即可。简单来说就是让目标数除以{2,3,5,7,11,13,17,19(一般20以内的质数即可)},一旦余数为零,则为非质数,剩下的即位以及相等(此判断条件在前)即为质数。

Ericfighter的博客 710

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

求质数的相关高效算法

1.利用一个定理——如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。例如:50,最小质因数是2,2&lt;50的开根号再比如:15,最小质因数是3,3&lt;15的开根号  合数是与质数相对应的自然数。一个大于1的自然数如果它不是合数,则它是质数。  上面的定理是说,如果一个数能被它的最小质因数整除的话,那它肯定是合数,即不是质数。所以判断一个数是否是质数,只需判断它是否能被小于它开跟...

imxike的博客 1871

Altium Designer应用技巧13: 四层板的拼版方法

本文介绍在Altium Designer中,进行4层板的拼版方法。Altium Designer有多种拼版方法,本文选择最直观的复制、删帖方法来完成,步骤如下: 1、看一下原始文件,如下图所示,我们要对该板进行拼版操作。 2、通过菜单“报告”-“板子信息”得到板子大小,在这里一般切换为mm比较好操作,我们可以使用快捷键"q"。 3、如果是水平拼版,我们需要关心水平长度;如果是垂直拼版...

snmplink的博客 1万+

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)

在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列二,去掉下拉状态栏中 通知栏部分 白色的圆角背景

安卓兼职framework和app工程师的博客 1636

判断质数/素数——我知道的最快的方法

标准版:大部分人都知道的比较快的方法:判断从2到sqrt(n)是否存在其约数,时间复杂度O(sqrt(n)) 高配版:判断2之后,就可以判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数,时间复杂度O(sqrt(n)/2) 尊享版: 首先看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等; 证明:令x≥1,将大于等于5的自然数......

海晨威 7万+

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 475

c++实现最快求质数个数以及质数的方法

本博文利用了筛选法实现了质数的求取,并且利用数学分析的特性进行了代码优化,使得速度获得极大提升,不可多得 #include<iostream> #include<bitset> #include<cmath> #include<iostream> using namespace std; //最快的方法筛选法求质数 int main() { ...

会飞的大象的博客 3479

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

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Python中最快的质数生成算法是什么

而线性筛法是目前已知的最快的质数生成算法之一,它的时间复杂度为O(n),可以用来生成大量的质数,是我们推荐使用的算法。与埃氏筛法不同的是,线性筛法并不是按照质数从小到大的顺序筛选,而是将每一个数都分解成质数的乘积,然后标记它为这些质数的最小值,最终得到质数序列。暴力法是最简单的生成质数的方法,它的原理是对每一个大于1的自然数进行判断,判断它是否为质数。埃氏筛法是一种较为优秀的质数生成算法,它的原理是通过不断地筛选,将不是质数的数排除掉,最终得到质数序列。可以看到,虽然结果是正确的,但是时间复杂度非常高。

我点评的博客 831

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

质数(素数)的求法及相关例题

质数(素数)的求法及相关例题 质数是什么? 质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 1-1000的质数表 代码: #include<stdio.h> #include<math.h> int main() { int m,n; scanf("%d%d",&m,&n); int i,j; int num=0; for(i=m; i<=n; i++) { for

yzl_007的博客 867

Java中判断质数的方法

Java中判断质数的几种方法 说明: 1.质数:又称素数。是一个大于1的自然数(最小质数为2)。除了1和它自身外,不能被其他自然数整除的数。 =>质数:用n除[2,n-1]的所有数,不能整除就是n就是质数。 2.[2,n-1]缩小到[2,√n]效果相同 原因:判断一个n(n>1,自然数)是否是质数?√n把[2,n-1]分成两边,分别为[2,√n]和[√n,n-1]。 n在[2,√n]有整除的整数x,其余输不可整除;n在[√n,n-1]有整除的整数y,其余输不可整除 当n在[2,√n]全都

makabaka的博客 1万+

计算小于n的质数个数 方法总结

背景:统计质数个数是很基础的问题了,但是在n非常大的时候,不够快速的算法就会卡到效率瓶颈,下面是5个不同复杂度的算法。(1)暴力解法(2)缩小范围(3)数论引入(4)欧拉解法(5)最快解法1. 暴力解法:直接挨个去看是不是质数,判断质数的方法就看是不是能够被1和自身之外的整数整除class Solution: def countPrimes(self, n): """ ...

跬步至千里 1万+

这可能是Python中最快的质数计算方案 Python 质数计算 素数计算 多进程 多线程 超高速并行计算

这可能是Python中最快的质数计算方案: 计算2亿内的质数只要1秒! 计算10亿内的质数只要4.4秒! 这个速度可能比不了C, 但是对于Python可以说是非常快了! 筛选法简直无敌 从筛选法单线程实现,单线程结果保存, 到多进程实现,结果分段保存,自动合并 再到边计算边合并, 最后整理代模块化 一下搞了将近20个小时… 上结果! 以下是代码: # -*- coding = utf-8 -*- # @Time : 2020/9/8 20:43 # @Author : Suage # @File

qq_33766294的博客 2454

PAT 甲级 1015 Reversible Primes 关于判别质数的最快方法

题目描述 给定一个数N,和其进制D,如过N是质数,而且N在D进制下翻转,也是质数,则这个数符合要求。 输入描述 The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negati...

qq_26073557的博客 394

算法——质数筛法

三种质数筛法及其优化思路。

sparkle_soul的博客 1010

快速判断质数

下图是一百以内质素表 bool isPrime(int num) { if (num < 3) return num > 1; //不在6两侧的数一定不是质数 if (num % 6 != 1 && num % 6 != 5) return false; int sq = (int)sqrt(num); for(int i=5;i&...

qq_38781075的博客 6802

一文搞懂质数以及质数的筛法

因此只需要枚举到sqrt(n), 然后再判断是否n> 1(即看有没有除尽), 有则剩余的这个数一定是那个大于sqrt(n)的质因子。我们要遵循每一个合数只被最小的质数筛掉。核心思想: 就是用质数去把当前的合数筛掉,并且保证是用当前最小的素数筛掉的。大于1的整数中,如果只包含1和本身的这两个约数,那么就被叫做质数(素数)(这种算法的思想很重要, 用已经得到的结论去消除未来的部分不定数)对于当前的数i, 我们得到了所有2-i的质数的primes数组。一个合数一定是由质数的多少次方构成的形式 x = p。

weixin_61907955的博客 986

如何判断一个数是不是素数/质数——三种方法超详细总结,包含目前最快方法(附三套完整代码注释)

导入——素数的定义 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 分布规律:以36N(N+1)为单位,随着N的增大,素数的个数以波浪形式渐渐增多。 1)简单粗暴法 因为质数除了1和本身之外没有其他因数,所以判断n是否为质数,根据定义,直接从2到n-1逐个判断是否存在因数可以将n整除即可。 //c++代码 int n; cin>>n; for(int i=...

阿彻的博客 1万+

【转载】 判断质数/素数——我知道的最快的方法

转载自:https://blog.youkuaiyun.com/songyunli1111/article/details/78690447 标准版:大部分人都知道的比较快的方法:判断从 2 到 sqrt(n) 是否存在其约数,时间复杂度 O(sqrt(n)) 高配版:判断 2 之后,就可以判断从 3 到 sqrt(n) 之间的奇数了,无需再判断之间的偶数,时间复杂度 O(sqrt(n)/2) 尊享版:...

YLD10 的博客 796

java循环1000000000_求十亿内所有质数的和,怎么做最快?

注:对知乎的公式编辑功能实在无力吐槽,用typora写的文章直接粘过来公式无法显示,只好又手工加上了全部公式,不过可能还是会有遗漏。大家可以点击这个链接 查看我的博客原文。以下是正文:第一次关注到这个问题是在做project euler第10题的时候,原题目是要求两百万以内质数的和,知乎的题目把这个数字调到了10亿,事实证明这个规模调整是决定性的,很多在小规模可用的算法在10亿这个规模都不可用了。...

weixin_30651345的博客 688
上一篇: java 学习两则
下一篇: 草稿纸
blacksapper
博客等级 码龄19年 20粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值