Java - 素数算法返回16

Nam*_*ere 2 java primes

我希望这个Java程序能够传输10001个素数,但它莫名其妙地决定将16标记为素数.

这里的算法只是保持素数的运行计数,并检查每个新数字以查看它是否可被任何小于它的素数整除.如果不是,则将其添加到数组primes []中,该数字显示在控制台上,然后该过程继续,直到primes[ ]满.

public static void main(String[] args){
    int[] primes = new int[10001];
    int primeCount = 1;
    int testNumber = 3;
    primes[0] = 2;
    while(primeCount < 10001){
        for (int i = 0; i < primeCount; i++){
            if (testNumber % primes[i] == 0){
                i = 0;
                testNumber++;
            }
        }
        primes[primeCount] = testNumber;
        System.out.println(testNumber);
        primeCount++;
        testNumber++;

    }
}
Run Code Online (Sandbox Code Playgroud)

控制台读数:

   
3
5
7
11
13
16
17
19
.
.
.

除了16 ......任何想法之外,其他一切看起来都是有序的吗?

ogz*_*gzd 6

您应该设置i = -1而不是i = 0因为您i在将其设置为零后立即增加值.

我建议你重新开始思考for循环的工作原理.