Thursday, September 22, 2011

Program to find nth Prime number in C

Objective: To print any Prime number in C. 
This task may sound easy but is a very good exercise to help optimize CPU intensive programs. Finding Prime number is a very CPU hogging task and it becomes even more dreaded as the number starts to grow. Lets say we want to find 30001th prime. how will we find it?? Here is the program.

Programming logic: The easiest method is to check if the given number N is divisible by any number from 2 to N-1.
But it may be noted that we don't need to go beyond the number that is square root of N.  why??
lets have a look.
Say we are testing number 49 for prime number. Our objective is to find any number that may divide it. so we start from 2,3,4 etc. As soon as we cross 7 there will be no number that will divide 49, if there was we have got it earlier since it will be smaller then 7.  Get it?
another example 64 :
2x32
4x16
8x8
16x4
32x2
as you can see when we pass number 8 we don't need to test as the number that will come , we have tested them already. (clever right ?)

Code:
#include <stdio.h>
int main()
{
int count=0;
long a = 2;
while(count<30001)
{
    long b = 2;
    int prime = 1;// to check if found a prime
    while(b * b <= a)
    {
        if(a % b == 0)
        {
            prime = 0;
            break;
        }
        b++;
    }
    if(prime)
    count++;
    a++;
}
printf("%d st prime no. : %ld\n",count,--a);
return 0;
}


It may be noted that this program can be further optimized in several ways. One possible way is to consider only odd terms ( since even terms cant be prime, except 2)

8 comments:

  1. Is there any formula for finding nth prime number?

    ReplyDelete
    Replies
    1. There's no specific formula to find the nth prime, that's why we use sieve or div-mod method.

      Delete
  2. add a variable for desired prime and put that variable in place of 30001 in the code "while(count<30001)" and it will work to find the Nth prime.

    ReplyDelete
  3. yes there is a formula for calculate the nth prime??
    what is the probability tht the given number is prime ?? etc etc
    formula available !! check on google!

    ReplyDelete
  4. Well Actually Chandan is right, there are algorithms like Pollard's Rho Algorithm or general Number sieve method. These algorithm work far better for bigger numbers (having digits in 100's)

    ReplyDelete
  5. A prime number is a whole number greater than 1, which is only divisible by 1 and itself. First few prime numbers are : 2 3 5 7 11 13 17 19 23
    2 is the only even Prime number. Prime number program in C++. Every prime number can represented in form of 6n+1 or 6n-1, where n is natural number. 2, 3 are only two consecutive natural numbers which are prime too.

    ReplyDelete