素数程序的意外输出
Unexpected output from primes program
我有以下素数程序代码:
class Test2 {
public static void main(String[] args) {
System.out.println("Prime numbers inbetween 2-100: ");
boolean isComposite = false;
for (int i = 2; i <= 100; i++) {
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}//End for
}//End main()
}//End class
我的问题是,当我 运行 该代码时,我得到以下输出:
Prime numbers inbetween 2-100:
3
5
7
这么简单的代码,但我想不通它有什么问题!任何帮助将不胜感激。
此外,在 Java 中查找素数的最佳算法是什么?
您忘记重置isComposite
,所以9被检测为合数后,以下所有数字都被误认为合数:
for (int i = 2; i <= 100; i++) {
isComposite = false; // add this
...
P.S, 2也是你的代码漏掉的质数,所以你应该单独打印它:
System.out.println(2);
boolean isComposite = false;
for (int i = 3; i <= 100; i++) {
isComposite = false;
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}//End for
您需要在循环中将标志 isComposite
重置为:
for (int i = 2; i <= 100; i++) {
isComposite = false;
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}
否则它将永远true
循环。现在它打印:
Prime numbers inbetween 2-100:
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
我有以下素数程序代码:
class Test2 {
public static void main(String[] args) {
System.out.println("Prime numbers inbetween 2-100: ");
boolean isComposite = false;
for (int i = 2; i <= 100; i++) {
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}//End for
}//End main()
}//End class
我的问题是,当我 运行 该代码时,我得到以下输出:
Prime numbers inbetween 2-100:
3
5
7
这么简单的代码,但我想不通它有什么问题!任何帮助将不胜感激。
此外,在 Java 中查找素数的最佳算法是什么?
您忘记重置isComposite
,所以9被检测为合数后,以下所有数字都被误认为合数:
for (int i = 2; i <= 100; i++) {
isComposite = false; // add this
...
P.S, 2也是你的代码漏掉的质数,所以你应该单独打印它:
System.out.println(2);
boolean isComposite = false;
for (int i = 3; i <= 100; i++) {
isComposite = false;
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}//End for
您需要在循环中将标志 isComposite
重置为:
for (int i = 2; i <= 100; i++) {
isComposite = false;
if ((i % 2) == 0) {
continue;
}
for (int k = 3; k < i; k++) {
if ((i % k) == 0) {
isComposite = true;
break;
}
}
if (!isComposite) {
System.out.println(i);
isComposite = false;
}
}
否则它将永远true
循环。现在它打印:
Prime numbers inbetween 2-100:
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97