用ASP(vbscript)实现埃拉托斯芬筛法求质数的完整算法
发布时间:2010年5月27日 文章分类:服务器技术 文章作者:Hitomi 浏览次数:次
质数是自然数的一部分,有趣的是,它却与自然数的个数一样多,也有无穷多个。2000多年前,古希腊数学家就从理论上证明了这一点。
不过,质数看上去要比自然数少得多。有人统计过:在1到1000之间,有168个质数;在1000到2000之间,有135个质数;在2000到3000之间,有127个质数,而在3000到4000之间,就只有120个质数了。越往后,质数就越稀少。那么怎样从自然数里把质数给找出来呢?
公元前3世纪,古希腊数学家埃拉托斯芬发明了一种很有趣的方法。他首先把很多自然数按顺序列成一张数表,然后接照一定的规则,逐个把不是质数的数都划掉,最后就得到了全部的质数。具体规则是这样的:首先把1划掉,因为1既不是质数也不是合数。接下来的一个数是2,它是最小的质数,应予保留,但2的倍数一定不是质数,应该全都划掉。也就是从2起,每隔1个数就划掉1个数。在剩下的数中,3是第一个未被划掉的数,它是质数,应予保留,但3的倍数一定不是质数,应该全都划掉。也就是从3起,每隔2个数划掉1个数。4已被划掉了,在剩下的数中,5成了第一个未被划掉的数,它是质数,也应予以保留,但5的倍数一定不是质数,应该全都划掉。……这样继续划下去,数表上最后剩下的就全都是质数。
当时,埃拉托斯芬常把数表写在涂了白蜡的木板上,遇到需要划去的数,就在那个数的位置上刺1个孔。随着合数逐一被划掉。木板上变得千疮百孔,像是一个神奇的筛子,筛掉了合数,留下了质数。所以,人们将这种求质数的方法叫做埃拉托斯芬筛法。这种方法是世界上最古老的一种求质数的方法。它的原理挺简单,运用起来也很方便。现在,凭借经过改进后的埃拉托斯芬筛法,数学家们已经把10记以内的质数全都筛出来了。
以上是埃拉托斯芬筛法的故事及具体方法,下面研究怎么用ASP实现吧。。。。
下面是我用ASP实现的1-900的质数
http://www.sseoo.com/mygame/prime/
有兴趣的朋友可以在后边加上参数可以看到更多质数,不要太大哟
比如:http://www.sseoo.com/mygame/prime/?max=1200
源代码下载:http://www.sseoo.com/mygame/prime/prime.rar
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>用ASP(vbscript)实现埃拉托斯芬筛法求质数</title>
- <style type="text/css">
- #wrap{width:900px;margin:0 auto;border-top:1px solid #CCC;border-left:1px solid #CCC;}
- #wrap div{float:left;display:block;width:29px;height:29px;line-height:29px;text-align:center;border-right:1px solid #CCC;border-bottom:1px solid #CCC;font-weight:normal;font-size:10px;font-family:Geneva, Arial, Helvetica, sans-serif;color:#666;}
- #wrap div.not{background:#EEE;color:#DDD;}
- </style>
- </head>
- <body>
- <div id="wrap">
- <%
- max = request.querystring("max")
- if max = "" then max = 900
- for i = 1 to max
- if i = 1 then
- response.write(" <div class=""not"">"&i&"</div>"&vbCrLf)
- response.flush()
- else
- temp = 0
- for j = 2 to i - 1
- if i / j = int(i / j) then
- temptemp = temp + 1
- else
- temptemp = temp
- end if
- next
- if temp > 0 then
- response.write(" <div class=""not"">"&i&"</div>"&vbCrLf)
- response.flush()
- else
- response.write(" <div>"&i&"</div>"&vbCrLf)
- response.flush()
- end if
- end if
- next
- %>
- </div>
- </body>
- </html>