求素数的算法讨论

 

筛法求素数的算法讨论;

   首先,自己的程序如下;

 

                                   

 

书上的算法:

 

 

 

大体上,两种算法都是优化过的。(上图都是精简版,没有注释,只为说明情况)

下面对上图的一些“优化算法”做一说明;

素数;一个大于1的自然数,除了1和此整数外,不能被其他自然数整除的数。    比1大,但不是质数的自然数称为合数。

                一个自然数 数B=x*y  则有[2,sqrt(B)] U [sqrt(B), B] 这个区间,使得x y分别属于。即:

B若是合数,在区间[2,sqrt(B)]上必有B得一个因数,那么遍历这个区间的数,然后每个数累加(不超过B),看是否会出现B,这样就证明了B是合数,或是质数。 在遍历的同时,[2, sqrt(B-1)],[2, sqrt(B-2)]...  同样被遍历。

   上面第一个程序在此基础上继续优化;

偶数必能整除2,故首先排除偶数,其次,在奇数,这里最小为3,累加2,遍历。 当然,3的偶数倍不用过滤,只需过滤掉3的奇数倍。在过滤的同时,会出现3*5  与  5*3 类似的重复,故程序中使用,j = i * i ,进行优化,再者,j = j + 2 *i ,避免了3*5 中的 3*3 这个运算,在数据量大的时候,相信会有所进步。

                                                      2012     11         12

                                                   西安理工大  12级新生    网络121       王XX

posted @ 2012-11-12 17:00  江上摆渡翁  阅读(204)  评论(0)    收藏  举报