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