是技术,更是艺术
一心编程,就没有解决不了的问题
posts - 9, comments - 11, trackbacks - 0, articles - 0
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2011年8月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
C++(4)
QT(1)
算法(3)
图形学(1)
云平台
随笔档案
2010年10月 (1)
2010年9月 (1)
2010年7月 (3)
2009年12月 (1)
2009年9月 (2)
2009年8月 (1)
搜索
最新评论
1. re: QT显示TGA图片
经测试,在Linux下此方法不行。程序有时候出现异常,有时候会显示错误的图像。我的环境是Ubuntu11.10,Qt4.8.3,Qt Creator2.41。
--彩阳
2. re: 快速判断素数算法
理论依据是什么?
--aa
3. re: 快速判断素数算法
@某W
谢谢,抛砖引玉而已,期待你提出更优秀的方法
--李熙建
4. re: 判断单链表是否有环
@kyle
非常感谢你指出其中的错误
--李熙建
5. re: 快速判断素数算法
这方法很强大~
谢谢~
--某W
阅读排行榜
1. 快速判断素数算法(4194)
2. 判断单链表是否有环(3160)
3. QT显示TGA图片(2038)
4. 时间统计的几种方法(1027)
5. Material Editor(938)
评论排行榜
1. 判断单链表是否有环(4)
2. 快速判断素数算法(3)
3. Material Editor(3)
4. QT显示TGA图片(1)
5. temp 对象(0)
快速判断素数算法
Posted on 2010-07-16 21:40
李熙建
阅读(4194)
评论(3)
编辑
收藏
引用
所属分类:
算法
引理:
如果
a
是一个大于1的整数,而所有小于或等于根号
a
的素数都除不尽
a
,则
a
是素数。
理想的判断素数的方法应该是将所有小于或等于根号n的素数去除n,但是n是一个随机大于1的整数,小于这个数的平方根的素数表不好给定。下面介绍的方法,本意是动态的构建素数表,但是引入了很多冗余的除数。
代码:
bool
prime (
int
num)
{
if
(num
==
2
||
num
==
3
||
num
==
5
)
return
true
;
if
(num
%
2
==
0
||
num
%
3
==
0
||
num
%
5
==
0
||
num
==
1
)
return
false
;
unsigned
long
c
=
7
;
int
maxc
=
int
(sqrt (num));
while
(c
<=
maxc)
{
if
(num
%
c
==
0
)
return
false
;
c
+=
4
;
if
(num
%
c
==
0
)
return
false
;
c
+=
2
;
if
(num
%
c
==
0
)
return
false
;
c
+=
4
;
if
(num
%
c
==
0
)
return
false
;
c
+=
2
;
if
(num
%
c
==
0
)
return
false
;
c
+=
4
;
if
(num
%
c
==
0
)
return
false
;
c
+=
6
;
if
(num
%
c
==
0
)
return
false
;
c
+=
2
;
if
(num
%
c
==
0
)
return
false
;
c
+=
6
;
}
return
true
;
}
分析:
相对于sqrt(n)次除,上面的程序需要sqrt(n)*8/30次除,效率提升了15/4倍。
自然数n,我们假设小于n的素数数F(n),F(n)的分布规律为:当n趋向于无穷大时,F(n)/(x/logx) = 1;
所以,动态的冗余度近似为:(sqrt(n)*4/15-x/logx)/sqrt(n)*4/15
其他更好的判断素数的算法,希望你能给我留言或者写在评论上,谢谢!
Feedback
#
re: 快速判断素数算法
回复
更多评论
2011-06-02 20:47 by
某W
这方法很强大~
谢谢~
#
re: 快速判断素数算法
回复
更多评论
2011-08-01 09:19 by
李熙建
@某W
谢谢,抛砖引玉而已,期待你提出更优秀的方法
#
re: 快速判断素数算法
回复
更多评论
2012-10-25 19:21 by
aa
理论依据是什么?
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
求数组子数组之和的最大值和子数组位置
快速判断素数算法
时间统计的几种方法
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 李熙建