有关素数的疑问public class TestSuShu{static int num;public static v
1个回答

》》int k=(int)(Math.sqrt((double)i)+1);//为什么里面要加1

这一行之后的 for 循环的目的是检查 i 是否能被任何等于或大于 2 但小于或等于 (int) Math.sqrt(i) 的整数整除(注:多余的 “(double)” 被去掉了).该 for 循环的条件表达式被编成 j < k,即循环持续到 j == k - 1 为止,不包括 j == k,所以如果没有那个“加 1”,程序肯定会错误地忽略对于 i 是否能被 (int) Math.sqrt(i) 整除的检查.

如果该 for 循环的条件表达式被改成 j (int)(Math.sqrt(i))) {//为什么此处要做这样的判断,为什么这里面不要加1了

这一句的目的是判断内部 for 循环的结束是否因为 j < k 不再为真(若是,则 i 没有被任何等于或大于 2 但小于或等于 (int) Math.sqrt(i) 的整数整除,即 i 是素数).这一句执行的时候,j 的值不是小于就是等于 k,不可能大于 k,也就不可能大于 (int) (Math.sqrt(i) + 1),所以如果这一句 if 判断的条件里也有“加 1”,则句中的条件总为假,程序就不对了.

》》还有没有更简便的写法?

Java 支持带标签的 break 和 continue.在这程序里利用带标签的 continue 就不再需要内部 for 之后的 if 判断了:

class C {

public static void main(String[] args) {

int primeCount = 0;

next_i:

for (int i = 101; i < 200; i++) {

for (int divisor = 2; diviso