【发布时间】:2013-01-22 10:40:04
【问题描述】:
我在下面编写了以下代码来查找第 n 个素数。这可以在时间复杂度上提高吗?
说明:
ArrayList arr 存储计算的素数。一旦 arr 达到大小“n”,循环退出,我们检索 ArrayList 中的第 n 个元素。在计算素数之前将数字2和3相加,并检查从4开始的每个数字是否为素数。
public void calcPrime(int inp) {
ArrayList<Integer> arr = new ArrayList<Integer>(); // stores prime numbers
// calculated so far
// add prime numbers 2 and 3 to prime array 'arr'
arr.add(2);
arr.add(3);
// check if number is prime starting from 4
int counter = 4;
// check if arr's size has reached inp which is 'n', if so terminate while loop
while(arr.size() <= inp) {
// dont check for prime if number is divisible by 2
if(counter % 2 != 0) {
// check if current number 'counter' is perfectly divisible from
// counter/2 to 3
int temp = counter/2;
while(temp >=3) {
if(counter % temp == 0)
break;
temp --;
}
if(temp <= 3) {
arr.add(counter);
}
}
counter++;
}
System.out.println("finish" +arr.get(inp));
}
}
【问题讨论】:
-
请给我们一个直观的描述你的程序做什么,或者至少提供cmet。给我们一段代码并要求我们对其进行分析,这使得任何人都很难弄清楚它的含义。
-
它是否会提高计算复杂度可能还有待商榷,但埃拉托色尼的筛子还是要快一点。
-
@templatetypedef:将 cmets 添加到代码中。
-
另外,最好先搜索SO:stackoverflow.com/tags/primes/hot?filter=year。
标签: java performance algorithm complexity-theory primes