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 ответ
Я думаю, у вас есть три варианта:
- используйте BitArray с преобразованием или приведением ulong к int, как вы это сделали,
- используйте BitArray с int, так как это то, что написано для использования,
- используйте что-то кроме BitArray, которое будет принимать ulongs без приведения.