生成素数数组并在程序中使用它

时间:2014-06-24 14:03:18

标签: java arrays performance

我使用Java中的eratosthenes筛子生成了前1000万个素数。以下是相同的代码:

private static int[] gprime(int max) {
boolean[] isComposite = new boolean[max + 1];
for (int i = 2; i * i <= max; i++) {
    if (!isComposite [i]) {
        for (int j = i; i * j <= max; j++) {
            isComposite [i*j] = true;
        }
    }
}
int numPrimes = 0;
for (int i = 2; i <= max; i++) {
    if (!isComposite [i]) numPrimes++;
}
int [] primes = new int [numPrimes];
int index = 0;
for (int i = 2; i <= max; i++) {
    if (!isComposite [i]) primes [index++] = i;
}
return primes;
}

在生成这个素数数组之后,我需要在我的程序中多次使用这个数组。如果我继续写作

gprime(179424673)[i]

(179,424,673是第1000万个素数)每当我需要访问数组中的任何项时,执行效率非常低,因为它会一遍又一遍地运行该方法。 我如何简单地获取一个数组来访问该数组中的任何素数?

P.S。为什么我会对这个问题进行投票?那些刚接触编程的人是否只是低估并且不鼓励这样对stackoverflow提出任何进一步的问题?我清楚地提到了我的问题以及到目前为止我所做的代码。

1 个答案:

答案 0 :(得分:0)

将其存储为类级别常量

public static final int[] PRIMES = gprime(179424673); // <-- use the biggest value
                                                      // you will need here.

然后您可以使用

访问它(而不是gprime(179424673)[i]
PRIMES[i]