1. 程式人生 > 其它 >一種肥腸快的判斷素數方法

一種肥腸快的判斷素數方法

容易證明,大於6的素數一定都在6的兩側,即6i + 1 或 6i - 1,而6i + 2 到 6i + 4 一定不是素數。因為6i + 2 =  2 (3i + 1), 6i + 3 = 3(2i + 1), 6i + 4 = 2(3i + 2)。

那麼由這個結論,結合傳統的判斷素數方法(如下):

bool prime(int index) {
    for(int i=2;i<=sqrt(index);++i)
        if(index % i == 0) return false;
    
    return true;
}

我們可以把i從每次增長1優化成每次增長6,並且大於6而不是6兩邊的數可以直接判斷為合數。

優化後的判斷素數程式碼如下:

bool prime(int index) { //忽略了1,有需要自己加個判斷
    if(index <= 3) return true;
    if(index % 6 != 1 && index % 6 != 5) return false; //不是6兩邊的數不是素數
    
    int size = sqrt(index);
    for(int i=5;i<=size;i += 6) //6兩邊的數也不一定是素數
        if(index % i == 0 || index % (i+2) == 0) return
false; return true; }

優化後的效率是優化前的兩倍還高!