int[] pen = new int[Range];
                for (int i = 2; i < Range; i++)
                {
                    int k = (int)Math.Sqrt(i);
                    int j;
                    for (j = 2; j <= k; j++)
                        if (i % j == 0)
                            break;
                    if (j >= k + 1)
                        pen[i] = 1;
                }
                return pen;
这是求质数中的一段程序那个if (j >= k + 1)
                          pen[i] = 1;到底是什么意思呢?

解决方案 »

  1.   

      if (j >= k + 1)
       pen[i] = 1;
    说明i位置的那个数是质数(不是质数位置都是0吧)
      

  2.   

    可我不明白pen[i] = 1;这句的意义....
      

  3.   

    这个程序是个例题。。pen[i] = 1到底是个什么意思呢?
      

  4.   

    让pen这个数组中第2个元素的值等于1这题目作为例题不是坑害学生么?
      

  5.   

    if (j >= k + 1)    //判断之前的for循环不是经break语句而结束的
         pen[i] = 1; 将筛子上的这个标志置位
      

  6.   

    弱弱问下”pen[i] = 1; 将筛子上的这个标志置位 “这是什么意思
      

  7.   

    原本的算法叫做“Eractosthenes的筛”。它的所有数字放在筛子上(pen[i]就代表着数字i,其值为0或者1代表是否被筛掉了),然后从2开始,先筛掉所有2的倍数,在筛掉3的倍数,再筛掉5的倍数,再筛掉7的倍数,再筛掉11的倍数.......最后剩下的就是素数。而这个程序使用了筛选法的静态数据结构,却使用了另外一种算法。它遍历每一个整数,验证它是否是小于它的数字的整倍数,如果找到一个(break跳出循环)那么这个整数就不是素数。可惜它在优化上仅仅考虑到 Math.Sqrt(i) 而已,实际上还可以将 j++ 改为 j=j+2。而且更好地优化是仅仅考虑之前找到过的所有素数就行了,根本用不着遍历这么多j。但是既然需要保存“之前找到的所有素数”到一个List<int>结构,那么这个程序使用 pen[i] 就显得非常笨拙的。因此我同意,这个程序如果作为教学范例实在是问题太多。
      

  8.   

    太有病了这个程序~pen[i]=1就是指第i是个质数~用1来做标记