본문 바로가기

코테

[Codility] CountSemiprimes C++

반응형

세미프라임은 처음듣네........

그냥 프라임 구하고

세미프라임 구해서

dp만들어서 해줬다.

vector<int> primeNum;
int arr[50001] = {0,};

void semiprime(){
    for(int i=0; i<primeNum.size(); i++){
        for(int j=i; j<primeNum.size(); j++){
            if((long long)primeNum[i]*primeNum[j]>50000)   break;
            int n = primeNum[i]*primeNum[j];
            arr[n]++;
        }
    }
}

void prime(){
    for(int i=2; i<50001; i++){
        bool flag = true;
        for(int j=2; j*j<=i; j++){
            if(i%j==0){
                flag = false;
                break;
            }
        }
        if(flag){
            primeNum.push_back(i);
        }
    }
}

vector<int> solution(int N, vector<int> &P, vector<int> &Q) {
    prime();
    semiprime();
    vector<int> v;
    int dp[50001] = {0,};
    for(int i=2; i<50001; i++){
        dp[i] = dp[i-1]+arr[i];
    }
    for(int i=0; i<P.size(); i++){
        v.push_back(dp[Q[i]]-dp[P[i]-1]);
    }
    return v;
}

 

반응형

'코테' 카테고리의 다른 글

[Codility] FibFrog C++  (0) 2022.01.10
[Codility] CommonPrimeDivisors C++  (0) 2022.01.10
[Codility] CountNonDivisible C++  (0) 2022.01.09
[Codility] Peaks C++  (0) 2022.01.09
[Codility] Peaks C++  (0) 2022.01.09