101到200之间的素数 java第二个 if(i/2 - 1 == j) 求指教!

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 21:06:28

101到200之间的素数 java第二个 if(i/2 - 1 == j) 求指教!
101到200之间的素数 java

第二个  if(i/2 - 1 == j)   求指教!

101到200之间的素数 java第二个 if(i/2 - 1 == j) 求指教!
你那句话“if(i/2 - 1 == j)”表示的原因就如你注释所说,输出素数,但我知道这样你理解不了.这么说吧,你的程序是用循环相除来遍历判断的,但是给你举个例子,如果101都不能被50整除了,那么我们还用考虑101能不能被51或者52或者53整除吗?当然不用考虑,因为101的一半已经是能得到整数商的最小值2了,对吧?而当我判断除数的时候,从2开始到3,4,5,6...48,49,到什么时候为止呢?自然是到50为止对不对?因为如果101加入不能被所有这些1到50的数整除,是不是就说明101不可能被任何数整除了?所以101就是素数了吧.


其实你这个算法不算太好,我给你一个我的程序,这个简单点,好理解,也比你的算法更优化,程序中的temp是200开根号,之所以这么做,是因为200以内的数如果不能被1到200开根号之间的数整除,那么这个数就是素数:
public static void primeNumber(int start, int end) {
    int temp = (int)Math.sqrt(end);
    int sum = 0;
    for(int i = start; i <= end; i++) {
        int j = 2;
        for(; j <= temp; j++) {
            if(i % j == 0)
                break;
        }
        if(j > temp) {
            sum++;
            System.out.println(i + " ,");
        }
    }
    System.out.println("Prime number are " + sum);
}

public static void main(String[] args) {
    primeNumber(101, 200);
}