(C#、素数ジェネレーター)ここに友人と私が突っついていましたいくつかのコードがあります:
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;
}
私のドーキーなAMDx641800+(デュアルコア)では、34546.875msで10億未満のすべての素数に対して。問題は、ビット配列により多くを格納しているようです。20億を超えてクランキングしようとすることは、ビット配列が格納したい以上のことです。それを回避する方法について何かアイデアはありますか?