Submission

Status:

(PPPP)(PPP)(PPP)

Subtask/Task Score:

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

Score: 100

User: colo39

Problemset: Twin, Cousin, and Sexy Prime

Language: cpp

Time: 0.179 second

Submitted On: 2026-10-02 21:59:53

#include <bits/stdc++.h>
using namespace std;

class OddBitset {
private:
    vector<unsigned long long> bits;

public:
    explicit OddBitset(int maxValue) {
        size_t numberOfBits = static_cast<size_t>(maxValue / 2 + 1);
        size_t numberOfWords = (numberOfBits + 63) / 64;

        bits.assign(numberOfWords, ~0ULL);
    }

    void setComposite(int x) {
        size_t index = static_cast<size_t>(x / 2);
        bits[index >> 6] &= ~(1ULL << (index & 63));
    }

    bool isPrime(int x) const {
        if (x < 2) {
            return false;
        }

        if (x == 2) {
            return true;
        }

        if ((x & 1) == 0) {
            return false;
        }

        size_t index = static_cast<size_t>(x / 2);
        return (bits[index >> 6] >> (index & 63)) & 1ULL;
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int L, U;
    cin >> L >> U;


    int limit = U + 6;

    OddBitset prime(limit);

    prime.setComposite(1);

    for (int i = 3; 1LL * i * i <= limit; i += 2) {
        if (prime.isPrime(i)) {
            for (long long j = 1LL * i * i; j <= limit; j += 2LL * i) {
                prime.setComposite(static_cast<int>(j));
            }
        }
    }

    int answerTwin = 0;
    int answerCousin = 0;
    int answerSexy = 0;

    for (int p = L; p <= U; p++) {
        if (!prime.isPrime(p)) {
            continue;
        }

        if (prime.isPrime(p - 2) || prime.isPrime(p + 2)) {
            answerTwin++;
        }

        if (prime.isPrime(p - 4) || prime.isPrime(p + 4)) {
            answerCousin++;
        }

        if (prime.isPrime(p - 6) || prime.isPrime(p + 6)) {
            answerSexy++;
        }
    }

    cout << answerTwin << '\n';
    cout << answerCousin << '\n';
    cout << answerSexy << '\n';

    return 0;
}