using System;
using System.Diagnostics;
public class Test
{
static bool isPrime(int value)
{
for (int divisor = 7; divisor * divisor <= value; divisor += 30)
{
if (value % divisor == 0) { return false; }
if (value % (divisor + 4) == 0) { return false; }
if (value % (divisor + 6) == 0) { return false; }
if (value % (divisor + 10) == 0) { return false; }
if (value % (divisor + 12) == 0) { return false; }
if (value % (divisor + 16) == 0) { return false; }
if (value % (divisor + 22) == 0) { return false; }
if (value % (divisor + 24) == 0) { return false; }
}
return true;
}
public static int getNthPrime( int n )
{
if ( n == 1 ) return 2;
if ( n == 2 ) return 3;
if ( n == 3 ) return 5;
int prime = 7;
int i = 3;
while ( i < n )
{
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 4;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 2;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 4;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 2;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 4;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 6;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 2;
if ( isPrime( prime ) ) { ++i; if ( i == n ) break; }
prime += 6;
}
return prime;
}
public static void Main()
{
Stopwatch sw = new Stopwatch();
sw.Start();
int prime = getNthPrime( 10001 );
sw.Stop();
Console.WriteLine( prime );
Console.WriteLine( "Time to calculate in milliseconds : {0}",
sw.ElapsedMilliseconds );
}
}