Submission

Status:

(PPxS)(SSS)(SSS)

Subtask/Task Score:

{0/40}{0/30}{0/30}

Score: 0

User: TonnamSora

Problemset: Twin, Cousin, and Sexy Prime

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-13 13:41:38

#include <iostream>
#include <vector>
using namespace std;

int main(){
    int l, u;
    cin >> l >> u;
    bool a[u + 7] = {0};
    for(int i = 2; i <= u + 6; i++){
        if(a[i] == 0){
            for(int j = i * i; j <= u + 6; j = j + i){
                a[j] = 1;
            }
        }
    }
    a[0] = 1;
    a[1] = 1;
    int cnt = 0;
    for(int i = 0; i <= u + 6; i++){
        if(a[i] == 0){
            cnt++;
            //cout << i << " ";
        }
    }
    //cout << cnt;
    int p[cnt];
    int idx = 0;
    for(int i = 2; i <= u + 6; i++){
        if(a[i] == 0){
            p[idx] = i;
            //cout << p[idx] << " ";
            idx++;
        }
    }
    int idxl = 0;
    int idxu = 0;
    for(int i = 0; i < cnt; i++){
        if(p[i] < l){
            idxl++;
        }
        if(p[i] >= u){
            break;
        }
        idxu++;
        //cout << p[i] << " " << idxl << " " << idxu;
        //cout << "\n";
    }
    //cout << idxl << " " << idxu;
    int tp[u + 1] = {0}, cp[u + 1] = {0}, sp[u + 1] = {0};
    int start = idxl;
    int stop = idxu;
    if(idxu + 1 + 1 <= cnt){
        stop = idxu + 1;
    }
    else if(idxu + 1 + 2 <= cnt){
        stop = idxu + 2;
    }
    if(idxl >= 2){
        start = start - 2;
    }
    else if(idxl >= 1){
        start = start - 1;
    }
    for(int i = start; i <= stop; i++){
        if(i + 1 <= cnt && p[i] + 2 == p[i + 1]){
            tp[i]++;
            tp[i + 1]++;
        }
        if(i + 2 <= cnt && p[i] + 2 == p[i + 2]){
            tp[i]++;
            tp[i + 2]++;
        }
        
        if(i + 1 <= cnt && p[i] + 4 == p[i + 1]){
            cp[i]++;
            cp[i + 1]++;
        }
        if(i + 2 <= cnt && p[i] + 4 == p[i + 2]){
            cp[i]++;
            cp[i + 2]++;
        }

        if(i + 1 <= cnt && p[i] + 6 == p[i + 1]){
            sp[i]++;
            sp[i + 1]++;
        }
        if(i + 2 <= cnt && p[i] + 6 == p[i + 2]){
            sp[i]++;
            sp[i + 2]++;
        }
    }
    int tpcnt = 0;
    int cpcnt = 0;
    int spcnt = 0;
    for(long long int i = 0; i <= u; i++){
        if(tp[i] >= 1 && p[i] >= l && p[i] <= u){
            tpcnt++;
            //cout << i << " ";
        }
        if(cp[i] >= 1 && p[i] >= l && p[i] <= u){
            cpcnt++;
        }
        if(sp[i] >= 1 && p[i] >= l && p[i] <= u){
            spcnt++;
        }
    }
    cout << tpcnt << "\n" << cpcnt << "\n" << spcnt;
}