我想弄清楚的數字是這種形式(舉例):如何確定一個令人難以置信的大數是否是質數?
2^7 - 1
,2^31 - 1
,2^127 - 1
,等等。
這不是一個家庭作業問題,我只是在研究質數,很多信息都在我頭上(傅立葉變換)。最初我只是使用這樣的功能:
public static bool IsPrime(int candidate)
{
if ((candidate & 1) == 0)
{
return candidate == 2;
}
for (int i = 3; (i * i) <= candidate; i += 2)
{
if ((candidate % i) == 0)
{
return false;
}
}
return candidate != 1;
}
但是,一旦數字變得太大,停止工作。我也看着Sieve of Eratosthenes,但顯然只適用於小得多的數字。
爲了澄清,我不想寫一個程序找到素數,而是確定一個給定的數字是否爲素數。我正在尋找.NET Framework中的BigInteger結構,如果我能夠編寫足夠高效的算法(我願意花幾天時間完成),它看起來很有希望。
我不確定在這種情況下數學證明是否會更好,但我在這方面沒有太多的知識而不是編程,但如果有證明專門用於這類數字,絕對值得期待。
謝謝。
維基百科的概要:http://en.wikipedia.org/wiki/Primality_test –
[Mersenne primes](http://en.wikipedia.org/wiki/Mersenne_prime)也有關於特定形式的信息素數('2^p-1') – Mat
尋找大質數是一項持續不斷的科學努力,獲得新獎項。爲了證明一個「令人難以置信的」大數是一個主要數據是超級計算機和數學家團隊的一部分。解決使用運行在每天硬件上的.NET代碼的實際限制與迄今爲止發現的最大的總理相比可能非常低。 –