//使用穷举法并分别用for、while、do…while循环语句求出1~100之间的质数。
            bool IsPrime = true;            for (int dividend = 2; dividend <= 100; dividend++)//1既不是质数又不是合数
            {
                for (int divisor = 2; divisor < dividend; divisor++)
                {
                    if (dividend % divisor == 0)
                    {
                        IsPrime = false;//可以被1和自身以外的数整除,所以不是质数
                        break;
                    }
                }
                if (IsPrime) Console.WriteLine(dividend.ToString());
                IsPrime = true;
            }我这里之用了for循环,我会继续把while /do...while的也发上来,大家帮我提提意见,看看有没有改进的余地,先谢了!

解决方案 »

  1.   

    for (int divisor = 2; divisor < dividend; divisor++) 
    ------------------------------
    这里,不需要算那么多,简单点的至少可以除以2,进一步可以使用Math.Sqrt(dividend)
      

  2.   

    for (int divisor = 2; divisor < dividend; divisor++)这里可以改成divisor < dividend/2就行了,减少运行时间...
      

  3.   

    多谢楼上两位朋友的宝贵意见,以为很简单的东西,其实亮出来才发现存在不少问题。很庆幸自己把代码贴出来,才有机会得到这么多帮助。下面是用while和do...while完成的,也许还存在其他问题,欢迎批评指正。            //用while实现相同功能
                int dividend = 2;
                int divisor = 2;            while (dividend < 100)
                {
                    IsPrime = true;
                    divisor = 2;
                    while (divisor <= Math.Sqrt (dividend))
                    {
                        if (dividend % divisor != 0)
                        {
                            divisor++;
                        }
                        else
                        {
                            IsPrime = false;
                            divisor = 2;
                            break;
                        }
                    }
                    if (IsPrime) Console.WriteLine(dividend.ToString());
                    dividend++;
                }            //用do...while实现相同功能
                int dividend = 2;
                int divisor = 2;            do
                {
                    IsPrime = true;
                    divisor = 2;
                    do
                    {
                        if (dividend % divisor != 0)
                        {
                            divisor++;
                        }
                        else
                        {
                            if (dividend != divisor) IsPrime = false;
                            divisor = 2;
                            break;
                        }
                    } while (divisor <= Math.Sqrt(dividend));
                    if (IsPrime) Console.WriteLine(dividend.ToString());
                    dividend++;
                } while (dividend < 100);        }