Java – find the nth prime

I wrote the following code to find the nth prime Can this improve time complexity?

Description:

ArrayList arr stores calculated primes Once the ARR reaches the 'n' size, the loop exits and we retrieve the nth element in the ArrayList The numbers 2 and 3 are added before calculating the prime, and each number starting from 4 is checked as prime or not prime

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

Solution

Yes

Your algorithm performs o (n ^ 2) operation (I may not be accurate, but it seems so), where n is the result

have http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes The algorithm adopts o (IPN * log (log (n))) You can only perform InP steps in it and assume n = 2ipn * ln (IPN) N should be larger than IPN prime We know the distribution of prime numbers http://en.wikipedia.org/wiki/Prime_number_theorem )

In any case, you can improve your existing solution:

public void calcPrime(int inp) {
    ArrayList<Integer> arr = new ArrayList<Integer>();
    arr.add(2);
    arr.add(3);

    int counter = 4;

    while(arr.size() < inp) {
        if(counter % 2 != 0 && counter%3 != 0) {
            int temp = 4;
            while(temP*temp <= counter) {
                if(counter % temp == 0)
                    break;
                temp ++;
            }
            if(temP*temp > counter) {
                arr.add(counter);
            }
        }
        counter++;
    }

    System.out.println("finish" +arr.get(inp-1));
    }
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>