您的位置:首页 > 其它

素数

2015-10-12 08:30 190 查看
看了一下午也没有太大收获,先把自己觉得稍微明白了点的记录下。

查找1~N的比较好的算法就是筛选法,筛选法中比较好的处理方式如下:

1. 采用位图数据结构进行存储

位图.数据结构在STL中有,名字好像是叫bitstamp;将所有位都初始化为true

2. 存储数据的内容

A. 只存储奇数(2*i+3,i是位图中的位置,从0开始)

设bitstamp[i]=s ,如果s是素数,那么将bitstamp[s*t+i]设置为false
(其中t是正整数)

下面是数学分析,纠结:

如果第i位的数字s为素数,那么间隔s位处的数字肯定不是素数,是s的倍数,其下标应该是i+t*s

这种筛选会出现重复筛选,可以优化,没学会

B 存储所有数据
s是素数,则下一个起点是s*s,把后面的所有的s*s+2*i*s筛掉

前面小于s*s 的,且是s的倍数,应该会被s前面的素数筛选掉,所以只要从s*s始判断就可以了,2*i*s是跳过为偶数的数字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: