求素数的算法讨论
筛法求素数的算法讨论;
首先,自己的程序如下;

书上的算法:

大体上,两种算法都是优化过的。(上图都是精简版,没有注释,只为说明情况)
下面对上图的一些“优化算法”做一说明;
素数;一个大于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
向东行一里,即是向西行一里

浙公网安备 33010602011771号