コード例 #1
0
        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());
        }
コード例 #2
0
        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)));
        }
コード例 #3
0
        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());
        }