我執行在C#中使用BitArray的埃拉托色尼的篩算法4.代碼:C#BitArray和Int64的
cPrimesB = new BitArray((int)max, true); //in constructor
primes = new List<ulong>(); //in constructor
//the function
public ulong findPrimesBa()
{
ulong count = 0;
for (ulong i = 2; i < max; i++)
{
if (cPrimesB[(int)i])
{
//primes.Add(i);
count++;
for (ulong j = i + i; j < max; j = i + j)
cPrimesB[(int)j] = false;
}
}
return count;
}
該算法的作品,但我的問題是,BitArray不UINT64,所以我的工作需要將ulong變量轉換爲int。問題在於,如果用戶輸入大於Int32.MaxValue的數字,則會影響性能並導致數據丟失。那麼有沒有一種方法(解決方法)與ulong一起使用BitArray,而無需投射?
您是否嘗試過使用Array.ConvertAll? –
你是否需要使用ulong(你需要找多大的素數)?你有使用BitArray嗎? – hatchet
事情是我試圖比較一些主要生成算法的運行時性能,以及一些算法之間的差異,你會發現在性能上唯一真正的區別就是大數據投入時。這就是我需要ulong的原因。至於bitarray,我需要使用它,因爲Windows中每個進程的限制爲2GB。除BitArray之外的任何其他內容拋出OutOfMemoryException數字> 1bil – Lenquist