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

有关素数的疑问
public class TestSuShu{
static int num;
public static void main(String[] args) {
for (int i = 101; i < 200; i++) {
int j;
int k=(int)(Math.sqrt((double)i)+1);//为什么里面要加1
for (j = 2; j (int)(Math.sqrt(i))) {//为什么此处要做这样的判断,为什么这里面不要加1了
num++;
}
}
System.out.println();
System.out.println("素数的个数为:"+num);
}
}
还有没有更简便的写法,请回答我一下,呵呵,
vivian_yang 1年前 已收到1个回答 举报

rule2k1981 幼苗

共回答了16个问题采纳率:81.3% 举报

》》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

1年前

10
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.119 s. - webmaster@yulucn.com