-3

只是想知道是否有人可以帮助我。该代码正在运行,但是是否可以在保持其方法相同的同时从该算法中缩短/删除一些不必要的代码?我已经取出了一些我不需要的东西,但不确定是否可以取出其他东西。

提前致谢!

public static void listPrimes(int maxNum) {
    for (int i = 2; i < maxNum; i++) {   
        boolean isprime = true;   

        for (int j = 2; j <= Math.sqrt(i); j++) {   
            if (i > 1 && j < i && i % j == 0) {   
                isprime = false;   
                break;   
            }
        }   

        if (isprime) {
            System.out.println(i); 
        } 
    } 
}
4

1 回答 1

0

好的,这不是缩短,而是加快。另请注意,有更有效的方法可以找到素数。

除了输出值之外,Math.sqrt(i)可能是最昂贵的操作(一旦数字开始变大,它可能会占用越来越多的处理时间),您可能需要考虑在循环之前将其放入变量中。

只有 2 和奇数是素数,因此您可以硬编码 2 并跳过所有偶数。

i > 1 && j < i如前所述,毫无意义。

缩短 - 您isPrime只需检查即可替换j

public static void listPrimes(int maxNum) {
    System.out.println(2);
    for (int i = 3; i < maxNum; i += 2) {   
        int sqrtI = (int)Math.sqrt(i);
        int j;
        for (j = 2; j <= sqrtI; j++)
            if (i % j == 0)
                break;   

        if (j == sqrtI + 1)
            System.out.println(i); 
    } 
}
于 2013-04-05T07:03:23.510 回答