繁体   English   中英

素数程序的意外输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM