如何缩短此算法以查找Prime数字?

时间:2013-04-05 03:52:31

标签: java algorithm loops numbers primes

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

提前致谢!

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); 
        } 
    } 
}

1 个答案:

答案 0 :(得分:0)

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

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

只有2和不均匀的数字是素数,所以你可以硬编码2并跳过所有偶数。

如上所述,

i > 1 && j < i毫无意义。

SHORTEN - 只需检查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); 
    } 
}