C# C语言中的大型布尔数组问题#
我决定写一个素数生成器作为一个简单的例子。代码非常简单:C# C语言中的大型布尔数组问题#,c#,arrays,primes,boolean,C#,Arrays,Primes,Boolean,我决定写一个素数生成器作为一个简单的例子。代码非常简单: 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++) {
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 ();
}
静态无效生成时间(长最小值、长最大值)
{
bool[]prime=新bool[max+1];
对于(长i=2;ino)。与C++的vector
相反,在C中,bool
的数组是bool
的数组
如果您希望对值进行打包(每bool 8位),改用位数组。计算机可以寻址的最小信息单位是一个字节。因此bool
存储为一个字节。你需要特殊的代码将8个bool放在一个字节中。这个类为你做这件事。打赌它不是每个字节一个bool
@Blindy:你在。我不在计算机上使用IDE,但我想知道sizeof(bool)的值是多少。@Blindy:事实上,它就在sizeof页面上。sizeof(bool)=1字节。计算机可以“寻址”的最小信息单位是字节,而不是“存储”。@Dr_Asik:更准确。谢谢!我看过BitArray文档,还有BitArray(Int32)构造函数,但没有BitArray(Int64)构造函数。有没有办法创建包含超过Int32Max个元素的BitArray?如果需要更多元素,您必须卷起自己的类。一个简单的解决方案是聚合类中的多个BitArray
,这样做的工作量最小。我想这就是我必须要做的。谢谢!“每字节8位”…也许每字节8位?@Dr_Asik Well…更确切地说,“每字节8位”"。值得一提的是,有更好的算法可以用来寻找素数。无论你如何处理所有的小细节,这都不会超过某一点。你的老师是否期望你的程序可以扩展到10亿/万亿/更多的值?我没有老师——只是想通过练习来获得一点经验我会用谷歌搜索其他算法,谢谢!