Я реализую алгоритм 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, без приведения?