我使用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提出任何进一步的问题?我清楚地提到了我的问题以及到目前为止我所做的代码。
答案 0 :(得分:0)
将其存储为类级别常量
public static final int[] PRIMES = gprime(179424673); // <-- use the biggest value
// you will need here.
然后您可以使用
访问它(而不是gprime(179424673)[i]
)
PRIMES[i]