w22116972
3/27/2014 - 4:02 PM

build prime table faster

build prime table faster

bool prime[Max];                                // 幫助建立質數表 得到只有質數的vector
vector<ll> primeNumber;                         // 只有質數的vector

void setPrimeTable(){
    //for (int i=3; i<Max; i+=2) {prime[i]=true;}
    prime[0]=prime[1]=true;                     // 建表這裡為了少初始化這步,把所有true false的意義顛倒過來了!
    prime[2]=false;                             // 主要是把2丟進 專收集質數的vector裡
    primeNumber.push_back(2);
    for (ll i=3; i<Max; i+=2) {                 // 少掉所有偶數的情形,為了少一半的計算,只考慮奇數
        if (!prime[i]) {
            primeNumber.push_back(i);
            for (ll j=3; i*j<Max; j+=2) {       // 把所有i的倍數都考慮進去篩掉,但是不考慮偶數的倍數,因為不需考慮
                prime[j*i]=true;                // 從 3*i,5*i....奇數*i
            }
        }
    }
}