using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
var stopwatch = new Stopwatch();
var generator = new PrimeRobutslyGenerator();
generator.Generate(int.MaxValue);
Console.WriteLine("Position 100 {0}",generator.PrimeNumbers[99]);
Console.WriteLine("Time : {0}", stopwatch.Elapsed);
Console.WriteLine("Position 200 {0}",generator.PrimeNumbers[199]);
Console.WriteLine("Position 500 {0}",generator.PrimeNumbers[499]);
Console.WriteLine("Position 1000 {0} ",generator.PrimeNumbers[999]);
Console.WriteLine("Position 1500 {0} ",generator.PrimeNumbers[1499]);
Console.WriteLine("Position 2000 {0}",generator.PrimeNumbers[1999]);
Console.WriteLine("Position 2209 {0}",generator.PrimeNumbers[2208]);
public class PrimeRobutslyGenerator
public List<double> PrimeNumbers = new List<double>();
private int MaxPlaces = 0;
private double MaxNumber = 0;
public void Generate(double maxNumber)
MaxPlaces = (int)Math.Floor(Math.Log10(maxNumber)) + 1;
PrimeNumbers.AddRange(new List<double> { 2, 3, 5, 7 });
private void BuildPrimes(double number)
var places = Math.Floor(Math.Log10(number)) + 1;
for (var i = 1; i <= 9; i++)
var addition = (Math.Pow(10, places) * i);
var output = addition + number;
if (IsPrimeNumber(output))
PrimeNumbers.Add(output);
public bool IsPrimeNumber(double number)
if (number < 2 || number % 2 == 0)
var dividOn = (int)Math.Floor(Math.Sqrt(number));
for (var j = 3; j <= dividOn; j += 2)