我决定写一个素数发生器作为一个简单的例外。代码非常简单:
static void generatePrimes (long min, long max)
{
bool[] prime = new bool[max + 1];
for (long i=2; i<max+1; i++)
prime [i] = true;
for (long i=2; i<max+1; i++) {
if (prime [i]) {
if (i>=min)
Console.WriteLine (i);
for (long j=i*2; j<max+1; j+=i)
prime [j] = false;
}
}
Console.WriteLine ();
}
它可以正常使用1..10000之类的输入。但是,在max = 1000000000左右,它开始工作得非常慢;此外,mono需要大约1Gb的内存。对我来说,这似乎有点奇怪:bool [1000000000]不应该占用1000000000位,而不是字节?也许我犯了一些愚蠢的错误,我不认为这会让它变得如此无效?
答案 0 :(得分:8)
计算机可以处理的最小信息单位是一个字节。因此,bool
被存储为一个字节。您将需要特殊代码将8个bool放在一个字节中。 BitArray
课程为您完成此任务。
答案 1 :(得分:4)
不。与C ++的vector<bool>
相反,在C#中,bool
的数组是bools
的数组。
如果您希望打包您的值(每个bool 8位),请改用BitArray
。