using System; using System.Collections.Generic; using System.Diagnostics; class Program { static bool IsPrime(int num) { int sqrt = 1 + (int ) System.Math.Sqrt(num); for (int i = 2; i < sqrt; i++) { if (num % i == 0) return false; } return true; } static int NthLeftTruncatablePrime(int target) { var primeRoots = new List() { 2, 3, 5, 7}; int start = 0; int tens = 10; while (true) { int end = primeRoots.Count; for (int i = 1; i < 10; i++) { for (int pos = start; pos < end; pos++) { int newprime = tens * i + primeRoots[pos]; if (IsPrime(newprime)) { primeRoots.Add(newprime); if (primeRoots.Count == target) return newprime; } } } start = end; tens *= 10; } } static void Main(string[] args) { var timer = Stopwatch.StartNew(); NthLeftTruncatablePrime(10); int prime = -1; for (int i = 0; i < 1000; i++) { prime = NthLeftTruncatablePrime(1000); } timer.Stop(); Console.WriteLine(prime); Debug.WriteLine(prime); Console.WriteLine(timer.ElapsedMilliseconds); Debug.WriteLine(timer.ElapsedMilliseconds); } }