求素数的几种方法
来源:互联网 发布:centos 6.7 修改ip 编辑:程序博客网 时间:2024/04/29 04:35
一、根据定义
设判断n是否为素数。用2~(sqrt(n)+1)的数来除以要判断的数。
二、定义的改进
用2~sqrt(n)+1之内的素数来除以要判断的数。
我测了下不同范围内素数的比例,从小到大。下面列出一些数据,来增加些感性的认识。
//先是小范围的
1000范围内,素数所占比例为0.179000
2000范围内,素数所占比例为0.158500
3000范围内,素数所占比例为0.148667
11000范围内,素数所占比例为0.123818
12000范围内,素数所占比例为0.122250
13000范围内,素数所占比例为0.121308
47000范围内,素数所占比例为0.104213
48000范围内,素数所占比例为0.104021
49000范围内,素数所占比例为0.103714
68000范围内,素数所占比例为0.100426
69000范围内,素数所占比例为0.100130
70000范围内,素数所占比例为0.099871
//接着是大范围的
160000范围内,素数所占比例为0.092256
460000范围内,素数所占比例为0.083872
810000范围内,素数所占比例为0.080046
1110000范围内,素数所占比例为0.078042
3060000范围内,素数所占比例为0.072243
4710000范围内,素数所占比例为0.070051
5010000范围内,素数所占比例为0.069757
6960000范围内,素数所占比例为0.068173
可见这个改进还是不错的。 然而更高效的见下面的筛选法。
三、筛选法
这里的高效一部分体现在少了除法,还有一部分是因为不像之前的试除,而是类似直接构造(非素数)。
(ps.标记为1的不是素数)
1、第一种 (同样,经过实验,表明这个方法比之前的第二种方法要快很多)
2、第二种
两种方法依据的原理不同。
第一种:是通过所有两个因子的组合来得到合数。
第二种:内层一次循环排除掉一个素数的所有倍数。该方法能方便地从小到大选出素数。
3、第三种
由于所有大于等于5的素数都能表述成6N±1的形式。所以可以先通过这个式子筛选一遍。再对剩下的数进行进一步筛选。
(注意:并不是说符合6N±1形式的数就是素数)
- 求素数的几种方法
- 求素数的几种高效方法
- 求素数的几种方法
- 求素数的几种方法
- 求素数的几种方法
- 求素数的几种方法
- 求素数的几种高效方法
- 关于java实现的求素数的几种方法
- 求素数的几种方法(C/C++)
- java求100以内素数的几种方法
- 几种筛选求素数的实现
- 求素数的几种算法
- 求素数的方法
- 求素数的方法
- 【求素数的三种方法】
- 求素数的两种方法
- 几种检验素数的方法
- 几种检验素数的方法
- 学习笔记 --XML
- 解读 nginx 中 chain 和 buf
- Some understanding about the MVC
- 测试&运算符
- build packet header, (header + payload)
- 求素数的几种方法
- 取消Wince App 应用启动动画和隐藏分区注册表项
- 使用Json-lib生成JSON文本
- CSS Hack
- ASP.NET AJAX 无限级 JS 树形菜单
- ural 1017 Staircases
- 理解JAVASCRIPT 中hasOwnProperty()的作用
- 2010年最后一天电脑大比拼
- ural 1015 Test the Difference!