C# BitArray и Int64

Я реализую алгоритм Sieve of Eratosthenes с использованием BitArray в C# 4. Код:

cPrimesB = new BitArray((int)max, true); //in constructor 
primes = new List<ulong>(); //in constructor 

//the function
public ulong findPrimesBa()
    { 
        ulong count = 0;
        for (ulong i = 2; i < max; i++)
        {
            if (cPrimesB[(int)i])
            {
                //primes.Add(i);
                count++;
                for (ulong j = i + i; j < max; j = i + j)
                    cPrimesB[(int)j] = false;
            }
        }

        return count;
    }

Алгоритм работает, но моя проблема в том, что BitArray не работает с UInt64, поэтому мне нужно преобразовать ulong переменные в int. Проблема в том, что это влияет на производительность, а также на потерю данных, если пользователь вводит число больше, чем Int32.MaxValue. Так есть ли способ (обходной путь) использовать BitArray с ulong, без приведения?

1 ответ

Я думаю, у вас есть три варианта:

  1. используйте BitArray с преобразованием или приведением ulong к int, как вы это сделали,
  2. используйте BitArray с int, так как это то, что написано для использования,
  3. используйте что-то кроме BitArray, которое будет принимать ulongs без приведения.
Другие вопросы по тегам