
2个回答
展开全部
你那句话“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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询