首先 - 我在這個論壇中查了很多,我還沒有找到足夠快的東西。 我嘗試做一個函數,它返回指定範圍內的素數。例如,我使用Eratosthenes篩來完成此功能(使用C#)。我也試過阿特金的篩但埃拉托色尼一個運行速度更快(在我的實現):尋找素數的快速算法?
public static void SetPrimesSieve(int Range)
{
Primes = new List<uint>();
Primes.Add(2);
int Half = (Range - 1) >> 1;
BitArray Nums = new BitArray(Half, false);
int Sqrt = (int)Math.Sqrt(Range);
for (int i = 3, j; i <= Sqrt;)
{
for (j = ((i * i) >> 1) - 1; j < Half; j += i)
Nums[j] = true;
do
i += 2;
while (i <= Sqrt && Nums[(i >> 1) - 1]);
}
for (int i = 0; i < Half; ++i)
if (!Nums[i])
Primes.Add((uint)(i << 1) + 3);
}
它運行約兩倍的速度比代碼&算法我發現...... 有應該找到素數更快的方法,你可以幫幫我嗎?
在你在尋找什麼樣的素數?只需介於0和max int之間?範圍又有多寬? – Gleno 2010-09-27 21:52:00
讓我們來說一下類似億/ 2 – Ohad 2010-09-27 21:56:13
有10萬個素數不到10^9,所以預先計算它們會給你一個200MB的表。實際上它只是儲存篩子(10^9位是125MB,而且你不需要存儲偶數位,所以你可以將它全部放在64MB以下)。 – Gabe 2010-09-27 22:07:28