传递一个参数a,返回1到a之间素数的个数。素数即质数public int Fun(int a)
  {
  bool bl = true;
  int count = 0;
  for (int i = 1; i <= a; i++)
  {
  for (int j = 2; j < i; j++)
  {
  if (i % j == 0)
  {
  bl = false;
  break;
  }
      }
  if (bl)
  {
  count++;
  }  }
  return count;
    
  }
这是我写的一个方法,但结果错了,大家帮忙找下错误

解决方案 »

  1.   

    if (bl)
      {
      count++;
      }
    改成if(bl=true)
      {
      count++;
      }
    试试看..
      

  2.   

    /*
      * 最普通的算法:
      * 打印num以内的素数并返回素数个数
      * n、m分别为外、内层循环,i是第几个素数,s是素数个数
      */
     public int prime(int num){
      int n,m,i=0,s=0;
      label1:
      for(n=2;n<=num;n++)
      {
       for(m=2;m<=n/2;m++)
       {
        if(n%m==0)
        continue label1;
       }
       s++;
       i++;
       Console.WriteLine("第{0}个素数是:{1}",i,n);
      }
      return s;
     }
      

  3.   


    static void Main(string[] args)
    {
        foreach (int n in GetSH(1,100))
        {
            Console.WriteLine(n);
        }
        Console.ReadKey();
    }public static int[] GetSH(int min, int max)
    {
        List<int> result = new List<int>();
        int flag = 1;
        for (int i = min; i <= max; i++)
        {
            for (int j = 2; j <= Math.Sqrt(i); j++)
            {
                if (i % j == 0)
                {
                    flag = 0;
                    break;
                }
            }
            if (flag == 1) result.Add(i);
            flag = 1;
        }
        return result.ToArray();
    }
      

  4.   

    楼主好好看看代码,貌似你一旦碰到一个非素数以后,bl就再也不可能变成true了,从那以后永远都是false。
    每次判断完成以后你都要把bl置成true啊。
    而且计算素数的最优算法不是这样的,建议看下大学c语言教科书。里面有示例程序。
    把你那段代码改下。
    public int Fun(int a)
      {
      bool bl = true;
      int count = 0;
      for (int i = 1; i <= a; i++)
      {
       bl = true;
      for (int j = 2; j < i; j++)
      {
      if (i % j == 0)
      {
      bl = false;
      break;
      }
          }
      if (bl)
      {
      count++;
      }  }
      return count;
        
      }
      

  5.   

    还要这样改下
    public int Fun(int a)
      {
      bool bl = true;
      int count = 0;
      for (int i = 1; i <= a; i++)
      {
      bl = true;
      for (int j = 2; j < i; j++)
      {
      if (i % j == 0)
      {
      bl = false;
      break;
      }
      if (bl)
      {
      count++;
      }  }  }  return count;
        
      }
      

  6.   

    上面的wuyazhe老兄那个是最优算法。