Используйте несколько BitArrays, чтобы увеличить максимальный размер. Если число слишком велико, сдвиньте его и сохраните результат в битовом массиве для хранения битов 33-64.
BitArray second = new BitArray(int.MaxValue);
long num = 23958923589;
if (num > int.MaxValue)
{
int shifted = (int)num >> 32;
second[shifted] = true;
}
long request = 0902305023;
if (request > int.MaxValue)
{
int shifted = (int)request >> 32;
return second[shifted];
}
else return first[request];
Конечно, было бы неплохо, если бы BitArray поддерживал размер до System.Numerics.BigInteger.
Переключение на диск сделает ваш код очень медленным.
У меня 64-разрядная ОС, и мой BitArray также ограничен 32-разрядными.
PS: ваши вычисления простых чисел выглядят странно, мои выглядят так:
for (int i = 2; i <= number; i++)
if (primes[i])
for (int scalar = i + i; scalar <= number; scalar += i)
{
primes[scalar] = false;
yield return scalar;
}