//列出101到200以内所有的质数,程序没问题.编译通过.读起来比较朗朗上口.就是错了错了!
public class Zhi{
public static void main(String[] args){

int i = 101;

while(i<=200){
for(int j = 2; j<i; j++ ){
if(i%j==0){
continue;
}
else{
System.out.println(i);
}
}
i = i+2;
}
}

}

/**
从101开始到200内i递增2因为偶数都不是质数
使用while循环
j是从2到i循环
i % j=0
则continue跳过
否则显示结果
*/

解决方案 »

  1.   

    逻辑有点问题 非质数就break跳出 但也不是只验证了一个数不能除尽就判定为质数
    另判断质数只要区间[2,n/2]就行了         int i = 101;        while (i <= 200) {
                int temp = i;
                for (int j = 2; j < i/2; j++) {
                    if (i % j == 0) {
                        i = i + 2;
                        break;
                    }
                   
                }
                if (i == temp) {
                    System.out.println(i);
                    i = i + 2;
                }
            }
      

  2.   

    这个明显不对么,比如 i = 105, 当j < 5的时候,都会打印出105, 而且是打印2次。
    偶数不是质数,可是奇数又不全是质数!!!
    结构有问题。
    我觉得可以这样写:
    boolean flag = true;
    while(i<200) {
        flag = true;
        for(int j = 2; j < i; j++) {
            if(i % j == 0) {
               flag = false;
               break;
            }
        }
        if(flag) {
             System.out.println(i);
        }
    }
      

  3.   

    public static void main(String[] args) 
    {

    outer:for (int i = 101; i<200; i+=2)
    {    
    int k=Math.round((float)Math.sqrt(i));
    for (int j= 2; j<=k; j++)    
    {
    if(i%j==0)   continue outer;
    }
    System.out.print("  "+i);

      }
      System.out.println();
    }
      

  4.   

    判断一个数是否为质数的一个函数,请参考
    http://www.java2000.net/viewthread.jsp?tid=121
      

  5.   

    先指出一个错误,再调程序。
    “j是从2到i循环 ”是不需要的,应该是“j是从2到【i的根号2】的循环”然后,稍微debug一下就知道,你if(i%j==0){continue;} 就继续否则就打印,逻辑显然有问题。
    也不判断一下是否j从2到i,i是否可以被每个j整除。事实上,有一个j可以整除i,这个i就不是素数了。所以俺改一下程序如下:import java.util.Calendar;public class Test {
        public static void main(String[] args) {        int i = 101;
            while (i <= 200) {
                int sqrtI = (int) Math.sqrt(i);
                boolean flg = true;
                for (int j = 2; j <= sqrtI; j++) {
                    if (i % j == 0){
                        flg = false;
                        break;
                    }
                }
                if(flg)
                    System.out.println(i);
                
                i = i + 2;
            }
        }
    }
      

  6.   


    区间[2,n/2]显然太大了,完全没有必要。【2,sqrt(n)】就足够了。
    试想,判断101是否素数,从2到10,只要判断5次是否整除,[12,50]完全是在浪费时间,而且浪费了4倍的时间。
      

  7.   

    你的程序我看不懂.我不知道temp是啥意思 啊 .好像和我的一样啊!咋结果不一样呢
      

  8.   

    public class Zhi{ 
    public static void main(String[] args){   int i,j,m;  for(i=101;i<=200;i=i+2){
    m=(int)Math.sqrt(i);

    for(j=2;j<=m;j++){

    if(i%j==0)break;

    if(j>=m){
    System.out.println(i);}
    }
    }
    }
    }
      

  9.   

    public class Zhi{ 
    public static void main(String[] args){   int i,j,m;  for(i=101;i<=200;i=i+2){
    m=(int)Math.sqrt(i);

    for(j=2;j<=m;j++){

    if(i%j==0)break;

    if(j>=m){
    System.out.println(i);}
    }
    }
    }
    }
      

  10.   

    完整的代码如下:
    public class MainFrame { public static void main(String args[]) {
    int i = 101;
    boolean flag = true;
    while (i < 200) {
    flag = true;
    for (int j = 2; j < i; j++) {
    if (i % j == 0) {
    flag = false;
    break;
    }
    }
    if (flag) {
    System.out.println(i);
    }
    i++;
    }
    }}
    你试一下,结果不是出来了.逻辑上的错误.
      

  11.   

    有没有搞错??这种题还有这么多错法?有没有仔细看书???public class Test{
    public static void main(String[] args)
    {
    int i, j, n = 0;
    for(i = 101; i<=200; i++)
    {
    for(j = 2; j<i; j++)
    {
    if(i%j==0)
    {
    break;
    }
    }
    if (j>=i)
    {
    System.out.print(i + " ");
    n++;
    }
    if (n%10==0)
    {
    System.out.println();
    }
    }
    }
    }