日期:2014-05-20  浏览次数:20841 次

列出101到200以内所有的质数出现问题
//列出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跳过
否则显示结果
*/

------解决方案--------------------
逻辑有点问题 非质数就break跳出 但也不是只验证了一个数不能除尽就判定为质数
另判断质数只要区间[2,n/2]就行了

Java code
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;
            }
        }

------解决方案--------------------
先指出一个错误,再调程序。
“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;
}
}
}