2
每個素數的形式爲6k + 1或6k-1。爲了檢查數字是否爲素數,我們可以使用下面的算法。我看過基於這些算法編寫的程序。原始性檢查
public boolean isPrime(int n)
{
if (n <= 1) return false;
if (n <= 3) return true;
if (n%2 == 0 || n%3 == 0) return false;
for (int i=5; i*i<=n; i=i+6)
if (n%i == 0 || n%(i+2) == 0)
return false;
return true;
}
但我不明白什麼將是問題如果我們以下列方式寫代碼:
public boolean isPrime(int number){
boolean primeFlag = false;
if(number == 0 || number ==1){
return primeFlag;
}
if(number == 2 || number == 3){
primeFlag = true;
}
if((number+1)%6 == 0){
primeFlag = true;
}
if((number-1)%6 == 0){
primeFlag = true;
}
return primeFlag;
}
(1)相比,這一點,我們可以減少時間複雜度至O到O(root(n))。請讓我知道如果朝着錯誤的方向走。
第2號和第3號是您所述規則的例外;既不是所述的形式..實際上你正在看2,3輪因子分解。一些網絡研究將會有所幫助 – rossum