[英]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
...
PS,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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.