(C#,prime generator)这里有一些代码,我和一个朋友正在四处寻找:
public List<int> GetListToTop(int top)
{
top++;
List<int> result = new List<int>();
BitArray primes = new BitArray(top / 2);
int root = (int)Math.Sqrt(top);
for (int i = 3, count = 3; i <= root; i += 2, count++)
{
int n = i - count;
if (!primes[n])
for (int j = n + i; j < top / 2; j += i)
{
primes[j] = true;
}
}
if (top >= 2)
result.Add(2);
for (int i = 0, count = 3; i < primes.Length; i++, count++)
{
if (!primes[i])
{
int n = i + count;
result.Add(n);
}
}
return result;
}
在我笨拙的 AMD x64 1800+(双核)上,所有质数低于 10 亿的质数在 34546.875 毫秒内。问题似乎是在位数组中存储更多。试图增加超过 20 亿的数据比 bitarray 想要存储的要多。关于如何解决这个问题的任何想法?