快速查找某个范围内的所有素数
观察以下素数表,不能被小于素数n的素数整除的最小数为下一个最小素数。换句话说所谓素数可以看做是坐标中不断使用更小素数的倍数填充后剩余的最小数。
例:
1】2是最小素数,使用2的倍数不断填充坐标后,未被填充的最小数就是3,于是3就是大于2的下一个素数
2】然后使用3的倍数不断填充坐标,剩余的未被填充的最小数就是5(4已经被2的倍数填充),可以发现5是大于3的下一个素数
3】依次类推可以顺序的求解所有素数
...
隐隐约约觉得,通过以上规律可以推出某范围内素数个数与素数值的关系,我自己就没有再推了,有兴趣的可以尝试一下,如果有结果了望能分享给我一下,感谢。
然后“talk is cheap,give me the code(废话少说,放码过来)”
clc
clear all
close allnumEnter = 100000;
numVector = zeros(1,numEnter);
numVector(1,1) = 1;
disp('2');
divNum = 2;
tempVector = find(~numVector);tic
while(divNum <= numEnter)for iloop1 = 1:length(tempVector)% 小于divNum的数字不需要重复判断,相较于从2开始计算,可以节省1/3的时间(numEnter = 100000时)if(mod(tempVector(iloop1),divNum) == 0)numVector(1,tempVector(iloop1)) = 1;endendtempVector = find(~numVector); % 寻找所有原始向量中的零元素坐标if (min(size(tempVector))>0)divNum = tempVector(1,1); % 剩余的零元素的第一个坐标就是下一个素数elsedisp('end');break;enddisp(divNum);% disp 命令会增加耗时5%左右
end
toc
以上代码的最大特点就是使用排除法对整个数列进行筛选,一旦某个数字被确定是非素数,该数字就会被排除在下一轮的判断之外,同时一旦被确定了这个数是素数,那么所有不大于这个数的数字都会被排除在下一轮的判断之外,运行耗时如下,这是当前已知在不对任何一个素数漏判的前提条件下所需计算量最小的算法。
Elapsed time is 3.513769 seconds.
扫描验证一下n = 10000以内范围中,素数个数与n/lnn之间的关系(扫描时候用倍频程,应该得到的曲线会更漂亮一些,而且需要的计算量会更少一些)。
clc
clear
close allrange = 1000;
range1 = zeros(1,range);
nlnnVector = zeros(1,range);
primeNumberAcountVector = zeros(1,range);
radioVector = zeros(1,range);hbar = waitbar(0,'计算进度');
for iloop1 = 1:rangerange1(iloop1) = iloop1*10;nlnnVector(iloop1) = range1(iloop1)/log(range1(iloop1));primeNumberAcount = primeNumberSolute(range1(iloop1));primeNumberAcountVector(iloop1) = primeNumberAcount;radioVector(iloop1) = primeNumberAcountVector(iloop1)/nlnnVector(iloop1);waitbar(iloop1/range);
end
close(hbar)figure
subplot(2,1,1)
hold on
plot(range1,nlnnVector)
plot(range1,primeNumberAcountVector);
legend('nlnnVector','primeNumberAcountVector')
hold off
subplot(2,1,2)
semilogx(range1,radioVector)
结果如下图
图2是两个结果之间的比值。
快速查找某个范围内的所有素数相关推荐
- 快速查找计算9百万万亿整数内全部素数(质数)的C++代码
用素数筛查找小于等于某个给定整数的全部素数,是一种较为高效的方法,具体的原理网上很多,这里就不赘述了. 但即使都是运用的素数筛原理,不同的算法设计,也可以带来巨大的效率差异.最近从网上搜索学习了相关的 ...
- 埃拉托斯特尼筛法 快速查找素数
埃拉托斯特尼筛法 快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个 ...
- nyoj187 快速查找素数
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N&l ...
- kotlin 查找id_Kotlin程序查找给定范围内的素数
kotlin 查找id A prime number is a natural number that is greater than 1 and cannot be formed by multip ...
- JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容
实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的 ...
- Rabin-Karp 算法(字符串快速查找)
Rabin-Karp 算法(字符串快速查找) 算法 代码 算法 Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法.Rabin-Karp 算法是基于这样的思路 ...
- (私人收藏)[开发必备]HTML5最全快速查找离线手册(可查询可学习,带实例)...
[开发必备]HTML5最全快速查找离线手册(可查询可学习,带实例) HTML5最全快速查找离线手册:https://pan.baidu.com/s/19seE8TJQSx4IsWgXtKQS0A j9 ...
- c++标准模板库STL【快速查找】【最全】【常用】【语法】
c++标准模板库STL[快速查找][最全][常用][语法] c标准模板库STL快速查找最全常用语法 vector- 变长数组 set-内部自动有序且不含重复元素 ...
- windows xp https页面找不到_Windows 提权快速查找 Exp
微软官方时刻关注列表网址: https://technet.microsoft.com/zh-cn/library/security/dn639106.aspx 比如常用的几个已公布的exp:KB25 ...
- 面试被问,一千万个整数里面快速查找某个整数,你会怎么去做?
最近小林在求职面试中被询问了这么一个有趣的面试题: 假设当我们需要在一千万个整数(整数的范围在1-1亿之间)里面快速查找某个整数是否存在于其中的话,如何快速查找进行判断会比较方便呢? ps: int ...
最新文章
- Oracle 变量绑定与变量窥视合集系列二
- 特征训练、预测一致性管理工具:开源项目Feast
- 十、 RDD编程和Spark SQL
- Visual Studio编译选项简介
- postgresql主从备份_基于windows平台的postgresql主从数据库流备份配置
- 影响中国历史的十篇政治美文
- PYPL 11 月的 IDE 指数榜单
- android系统耗电如何关闭,安卓手机建议关闭这4大功能,耗电快的罪魁祸首?不用一天三充了...
- Mysql中的日期及时间相关函数
- 自架魔兽服务器物品代码,魔兽世界物品代码与GM指令大全(全部整理自网上).doc...
- Center OS 7
- css3中文参考手册
- 最新服务器处理器天梯,2019 最新 至强 Xeon 服务器系列 CPU天梯图
- 且初土豆泥、everbab棉花糖粉扑、好望水气泡饮、王小卤虎皮凤爪、PWU留香珠…月销千万的黑马爆品如何玩转新消费营销?
- Android 100元平板也能吃鸡玩王者!小米平板刷机神盾dot1.2保姆级教程。
- 联想g40改Android,求大神帮忙,联想g40如何改win7系统?
- 尚硅谷-微信小程序文档
- 全球及中国停车信息系统行业研究及十四五规划分析报告
- 重磅!北京出落户新政:7所大学本科及以上毕业生,符合一定条件可直接落户!...
- 论突变为零(不定更新)