Eratosthenes筛法求素数

来源:互联网 发布:连锁店软件多少钱 编辑:程序博客网 时间:2024/04/27 19:11

本总结是是个人为防止遗忘而作,不得转载和商用。

题目

         给定正整数N,求小于等于N的全部素数

Eratosthenes筛法

         1,将2到N写成一排;

         2,记排头元素为x,则x是素数;除x以外,将x的倍数全部划去;

         重复以上操作,直到没有元素被划去,则剩余的即小于等于N的全部素数。

举例

         用Eratosthenes筛计算100以内的素数。

         于是,第一步将2到N写成一排,这个就不写了。

         第二步:当前排头元素时2,则2是素数,所以将“除了2意外的2的倍数全部划去”,此时只剩下:

                   23 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 5759 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

         重复第二步:当前排头元素是3,则3是素数,所以将“除了3意外的3的倍数全部划去” ,此时只剩下:

                   23 5 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 7983 85 89 91 95 97

         重复第二步:当前排头元素是5,则5是素数,所以将“除了5意外的5的倍数全部划去” ,此时只剩下:

                   23 5 7 11 13 17 19 23 29 31 37 41 43 47 49 53 59 61 67 71 73 77 79 83 89 91 97

不过重复第二步算7时,按理应该删除7的倍数,不过7的倍数中的2*7,3*7, 4*7, 5*7,已经6*7被删过了,所以没必要再来一遍,因此直接从72开始删就好。

         同理,到11时,直接从112开始,而112 = 121 > 100,就不用再算了。

         所以,如果算100以内的素数则直接从2删到"根号100"就好。

 

0 0