エラトステネスの篩

p(n) = vectorの中にp以下の素数を列挙してリターンする

計算量 NloglogN

vector<int> p(int n) {
    vector<bool> ok(n+1,1);
    ok[0] = ok[1] = 0;
    for(int i = 2;i*i < n+1;i++){
        if(ok[i]){
            for(int j = i*i;j < n+1;j += i){
                ok[j] = 0;
            }
        }
    }
    vector<int> ans;
    rep(i,n+1){
        if(ok[i]){
            ans.push_back(i);
        }
    }
    return ans;
}