使用大小为long型的boolenas数组在C#上实现erathesthenes的筛网会产生溢出异常,请确保这是因为c#中的数组类型被限制为最大32位整数的大小。据我了解,这是因为通常用户无法在RAM中存储大于32位整数大小的数组。但是我们有布尔类型,它只是2位信息,因此该数组所需的ram应该是$ 2 * Long.MaxValue $。所以问题如下:
1)如何生成最长为Long.MaxValue的质数序列?
2)哪种数据类型最好用于存储此类序列?
3)我们可以重新定义大于32位最大大小的数组类型吗?
我的尝试在这里:
public bool[] MakeSieve(long max)
{
// Make an array indicating whether numbers are prime.
bool[] is_prime = new bool[max + 1];
for (int i = 2; i <= max; i++) is_prime[i] = true;
// Cross out multiples.
for (int i = 2; i <= max; i++)
{
// See if i is prime.
if (is_prime[i])
{
// Knock out multiples of i.
for (int j = i * 2; j <= max; j += i)
is_prime[j] = false;
}
}
return is_prime;
}
当然,它会引发溢出异常。