我刚学java几天,想用java编一个程序用来求101到225之间共有多少个素数,并把它们都显示出来,但运行程序的结果却出乎我意料,下面是我的程序:
class PrimeNumber
{
public static void main(String[] args)
{
Opera o=new Opera();
o.Output();
}
}class Opera
{
static int flag=0; 
Opera()
{
for(int i=101;i<122;i++)
{
int k=(int)(Math.sqrt(i)+1);
for(int n=2;n<k;n++)
{
while(n==(int)(Math.sqrt(i)))
{
if(i%n!=0)
{
flag++;
System.out.println(i);
break;
}
}
if(i%n==0)
{
break;
}
}
}
}
void Output()
{
System.out.println("一共有素数"+flag+"个");
}
}下面是运行结果:
101
103
107
109
113
然后cmd窗口就没反应了,一看windows任务管理器 cpu占用率100%,大家谁能帮我看看这个程序到底哪里错了啊???其实开始是时候我是求101到200之间的素数的,但也出现了这样的问题,我以为是运算不过来呢,就把200改为110,一试,真好使,但我把数设置为123就不行了,不知道为什么!!

解决方案 »

  1.   

    public class MathTest
    {
    public static void main(String[] args)
    {
    Opera o = new Opera();
    o.Output();
    }
    }class Opera
    {
    static int flag = 0;
    Opera()
    {
    for (int i = 101; i < 226; i++)
    {
    int k = (int) (Math.sqrt(i) + 1);
    for (int n = 2; n < k; n++)
    {
    if (i % n == 0)
    break;
    if (n == k - 1)
    {
    System.out.print(i + "\t");
    flag++;
    if (flag % 10 == 0)
    System.out.println();
    }
    }
    }
    } void Output()
    {
    System.out.println("一共有素数" + flag + "个");
    }
    }
      

  2.   

    out:
    101 103 107 109 113 127 131 137 139 149
    151 157 163 167 173 179 181 191 193 197
    199 211 223 一共有素数23个
      

  3.   

    public class Test {
      public static void main(String[] args) {
        int begin = 101;
        int end = 225;
        int total = new Test().statisticPrime(begin, end);
        System.out.println("从[" + begin + "]到["+end+"]共有[" + total + "]个素数.");
      }

      public int statisticPrime(int begin,int end){
        int total = 0;
        for (int i = begin; i < end; i ++){
          if (isPrime(i)){
            total ++;
            System.out.println(i);
          }
        }
        return total;
      }

      private boolean isPrime(int num){
        if (num <= 2){
          if (num == 2){
            return true;
          }
          return false;
        }
        if (num%2 == 0){
          return false;
        }
        for (int i = 3; i < (int)Math.sqrt(num); i ++){
          if (num % i == 0){
            return false;
          }
        }
        return true;
      }
    }供参考~~~~
      

  4.   

    public class Test {
      public static void main(String[] args) {
        int begin = 101;
        int end = 225;
        int total = new Test().statisticPrime(begin, end);
        System.out.println("从[" + begin + "]到["+end+"]共有[" + total + "]个素数.");
      }

      public int statisticPrime(int begin,int end){
        int total = 0;
        for (int i = begin; i < end; i ++){
          if (isPrime(i)){
            total ++;
            System.out.println(i);
          }
        }
        return total;
      }

      private boolean isPrime(int num){
        if (num <= 2){
          if (num == 2){
            return true;
          }
          return false;
        }
        if (num%2 == 0){
          return false;
        }
        for (int i = 3; i <= (int)Math.sqrt(num); i ++){
          if (num % i == 0){
            return false;
          }
        }
        return true;
      }
    }供参考~~~~
      

  5.   

    你们的程序我是看明白了,但是我自己的程序的毛病还是没找到!!!
    就是下面这段:while(n==(int)(Math.sqrt(i)))
    {
    if(i%n!=0)
    {
    flag++;
    System.out.println(i);
    break;
    }
    }
      

  6.   

    啊,我打到问题所在了,我把while换成if就好了..但是原因是什么我不清楚!
    if(n==k-1)
    {
       if(i%n!=0)
      {
         flag++;
         System.out.println(i);
         break;
      }
    }
      

  7.   

    zhuokai()的程序简捷流畅,的确写的不错