打印质数的Linq算法

今天看到打印质数的各种算法的文章,突发奇想实现了其较好的算法Linq版实现。

引用算法如下。

一、初始化如下列表。

 2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

二、把第一个数(2)取出来,去掉所有可以被2整除的数。

 2  3     5     7     9    11    13    15    17    19    21    23    25    27    29

三、取第二个数(3),去掉所有可以被 3整除的数。

 2  3     5     7          11    13          17    19          23    25          29

四、取第三个数(5),因为4已经被去除了,再去掉所有可以被5整除的数。

 2  3     5     7          11    13          17    19          23                29

接下来的数是7,但是7的平方是49,其大于了30,所以我们可以停止计算了。剩下的数就是所有的质数了。


static void Main(string[] args)
        {
            int length = 30;//最大长度
            var list = Enumerable.Range(1, length);// 1-{最大长度} 的序列
            for (int i = 1; ; i++)
            {
               int n = list.ElementAt(i);//取下一个有效数字
               if (n * n > length)//数的平方大于{最大长度},就停止计算了
               {
                   break;
               }
               list = list.Where(p => p == n || p % n != 0);
          }
            //打印
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
        }
posted @ 2011-02-24 10:15  kiminozo  阅读(465)  评论(0编辑  收藏  举报