public IEnumerable <int> Calculate(int n) { var array = new BitArray(n, false) { [2] = true }; for (var i = 3; i < n; i += 2) { array[i] = true; } for (var p = 3; p < n; p += 2) { if (!array[p]) { continue; } var maxQ = n / p; if (maxQ % 2 == 0) { maxQ--; } for (var q = maxQ; q >= p; q -= 2) { if (array[q]) { array[p * q] = false; } } } return(array.CollectBitArray()); }
public IEnumerable <int> Calculate(int n) { var array = new BitArray(n, true) { [0] = false, [1] = false }; for (var i = 1; i < n; i++) { var flag = true; for (var j = 1; j < n && flag; j++) { var factor = i + j + 2 * i * j; if (factor < n) { array[factor] = false; } else { flag = false; } } } return(new[] { 2, 3 }.Concat(array.CollectBitArray().Select(x => x * 2 + 1).TakeWhile(x => x < n))); }
public IEnumerable <int> Calculate(int n) { var array = new BitArray(n, true) { [0] = false, [1] = false }; for (var i = 2; i < Math.Sqrt(n); i++) { if (!array[i]) { continue; } for (var j = i * i; j < n; j += i) { array[j] = false; } } return(array.CollectBitArray()); }