using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
Func<int, IEnumerable<int>> nonPrimesUpTo = limit => Enumerable
.Range(2, (int) (Math.Sqrt(limit)) - 1)
.SelectMany(x => Enumerable
.Range(2, short.MaxValue)
.Select(y => x * y)
.TakeWhile(p => p <= limit))
.Distinct();
Func<int, IEnumerable<int>> sieve = limit => Enumerable
.Range(2, limit - 1)
.Except(nonPrimesUpTo(limit));
foreach (var prime in sieve(100)) {
Console.WriteLine(prime);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CnB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICBGdW5jPGludCwgSUVudW1lcmFibGU8aW50Pj4gbm9uUHJpbWVzVXBUbyA9IGxpbWl0ID0+IEVudW1lcmFibGUKICAgICAgICAgICAgLlJhbmdlKDIsIChpbnQpIChNYXRoLlNxcnQobGltaXQpKSAtIDEpCiAgICAgICAgICAgIC5TZWxlY3RNYW55KHggPT4gRW51bWVyYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5SYW5nZSgyLCBzaG9ydC5NYXhWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU2VsZWN0KHkgPT4geCAqIHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlRha2VXaGlsZShwID0+IHAgPD0gbGltaXQpKQogICAgICAgICAgICAuRGlzdGluY3QoKTsKICAgICAgICAKICAgICAgICBGdW5jPGludCwgSUVudW1lcmFibGU8aW50Pj4gc2lldmUgPSBsaW1pdCA9PiBFbnVtZXJhYmxlCiAgICAgICAgICAgIC5SYW5nZSgyLCBsaW1pdCAtIDEpCiAgICAgICAgICAgIC5FeGNlcHQobm9uUHJpbWVzVXBUbyhsaW1pdCkpOwoKICAgICAgICBmb3JlYWNoICh2YXIgcHJpbWUgaW4gc2lldmUoMTAwKSkgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShwcmltZSk7CiAgICAgICAgfQogICAgfQp9