用 C 语言思想改写的用筛法求质数程序(第 2 修订版)
作者:中国论坛网收集 来源:http://www.51one.net 加入时间:2004-8-25
注:这是本人去年非典期间在 vccode 上发表的拙作,近日看到这里人气不错,重贴给同好探
讨,勿怪
http://www.vccode.com/file_show.php?id=1852
http://www.vccode.com/file_download.php?id=1852 源代码
原创: 本文及程序可免费使用,请勿用于商业用途
原算法思想:
1)先假定所有数都是质数,直到证明它不是。
2)通过筛除所有比较小的质数的倍数来找到质数。
改进一:
利用“大于 2 的质数都是奇数”这一知识,将存放待筛整数空间减少一半,只存储奇数。
改进二:
由于不再存有偶数,筛出的必然是奇数和奇数之积,乘数从 3 开始每次增 2,将循环次数再
减少一半
改进三:
(可能只能在 C 语言里这么做),利用位(bit)存放各数是否质数的标志,将存放空间减少到
1/8
虽然每次循环的位运算步骤增加了,但是申请内存的时间大大减少,而且能求出更大的质数
定义了 2 个宏
#define getisp(i) (isprime[(i)/8]>>((i)%8))&0x1
用来取得第 i 个数是否质数标记