素数

来源:互联网 发布:南风知我意 书包网 编辑:程序博客网 时间:2024/06/05 05:43
看了一下午也没有太大收获,先把自己觉得稍微明白了点的记录下。
查找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是跳过为偶数的数字   

0 0
原创粉丝点击