(C#の、プライムジェネレータ) HERESにいくつかのコードの友人をMaxxingと私は上のチャンスをうかがった:のために、私の役立たずのAMDのx64 1800+(デュアルコア)で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;
}
すべての素数は34546.875msで10億以下です。問題は、ビット配列にもっと格納しているようです。 〜20億以上をクランクしようとするのは、そのビットアレイが保存したい以上のものです。それを回避する方法に関するアイデア?
にも参照?私はメインフレームの世界でやっていることを知っています。インテルC++コンパイラは(少なくとも)64ビットであると思っていました。 – paxdiablo