using System;
using System.Collections.Generic;
using System.Diagnostics;
public class Test
{
public static void Main()
{
var pgm = new Test();
pgm.DoStuff();
Console.WriteLine("Done. Press Enter.");
Console.ReadLine();
}
private void DoStuff()
{
const int MaxPrime =
1000000;
// 22307;
for (var i = 0; i < 2; ++i)
{
var sw = Stopwatch.StartNew();
var primes = FindPrimes(MaxPrime);
sw.Stop();
var ms = (1000.0*sw.ElapsedTicks)/Stopwatch.Frequency;
Console.WriteLine("{0:N0} primes found in {1} ms ({2})", primes.Count, ms, sw.ElapsedMilliseconds);
}
Console.WriteLine();
}
private List<int> FindPrimes(int maxVal)
{
var primes = new List<int>{2};
for (var x = 3; x <= maxVal; x += 2 )
{
var maxDiv = (int) Math.Round(Math.Sqrt(x));
bool isPrime = true;
for (var i = 1; i < primes.Count && primes[i] <= maxDiv; ++i)
{
if ((x%primes[i]) == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
primes.Add(x);
}
}
return primes;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBwZ20gPSBuZXcgVGVzdCgpOwogICAgICAgICAgICBwZ20uRG9TdHVmZigpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiRG9uZS4gUHJlc3MgRW50ZXIuIik7CiAgICAgICAgICAgIENvbnNvbGUuUmVhZExpbmUoKTsKICAgICAgICB9CgogICAgICAgIHByaXZhdGUgdm9pZCBEb1N0dWZmKCkKICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IGludCBNYXhQcmltZSA9IAogICAgICAgICAgICAgICAgMTAwMDAwMDsgCiAgICAgICAgICAgICAgICAvLyAyMjMwNzsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBzdyA9IFN0b3B3YXRjaC5TdGFydE5ldygpOwogICAgICAgICAgICAgICAgdmFyIHByaW1lcyA9IEZpbmRQcmltZXMoTWF4UHJpbWUpOwogICAgICAgICAgICAgICAgc3cuU3RvcCgpOwogICAgICAgICAgICAgICAgdmFyIG1zID0gKDEwMDAuMCpzdy5FbGFwc2VkVGlja3MpL1N0b3B3YXRjaC5GcmVxdWVuY3k7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiezA6TjB9IHByaW1lcyBmb3VuZCBpbiB7MX0gbXMgKHsyfSkiLCBwcmltZXMuQ291bnQsIG1zLCBzdy5FbGFwc2VkTWlsbGlzZWNvbmRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBMaXN0PGludD4gRmluZFByaW1lcyhpbnQgbWF4VmFsKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHByaW1lcyA9IG5ldyBMaXN0PGludD57Mn07CiAgICAgICAgICAgIGZvciAodmFyIHggPSAzOyB4IDw9IG1heFZhbDsgeCArPSAyICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIG1heERpdiA9IChpbnQpIE1hdGguUm91bmQoTWF0aC5TcXJ0KHgpKTsKICAgICAgICAgICAgICAgIGJvb2wgaXNQcmltZSA9IHRydWU7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHByaW1lcy5Db3VudCAmJiBwcmltZXNbaV0gPD0gbWF4RGl2OyArK2kpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCh4JXByaW1lc1tpXSkgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzUHJpbWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHJpbWVzLkFkZCh4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcHJpbWVzOwogICAgICAgIH0KfQ==