Submission
Status:
(PPPP)(PPP)(PPP)
Subtask/Task Score:
{40/40}{30/30}{30/30}
Score: 100
User: porpeang
Problemset: Twin, Cousin, and Sexy Prime
Language: cpp
Time: 0.273 second
Submitted On: 2026-10-08 10:00:48
#include <iostream>
#include <bitset>
using namespace std;
// ขนาดสูงสุดตามเงื่อนไข u <= 70,000,000
const int MAX = 70000005;
// ประกาศ Global Bitset ใช้หน่วยความจำเพียง ~8.35 MB (ไม่เกิน 16 MB)
bitset<MAX> is_prime;
void sieve() {
is_prime.set(); // ตั้งค่าทุกช่องเป็น true
is_prime[0] = is_prime[1] = 0;
for (int i = 2; i * i < MAX; i++) {
if (is_prime[i]) {
for (int j = i * i; j < MAX; j += i) {
is_prime[j] = 0;
}
}
}
}
int main() {
// ปิด synchronization เพื่อเพิ่มความเร็วในการอ่าน/เขียนข้อมูล
ios_base::sync_with_stdio(false);
cin.tie(NULL);
sieve();
int l, u;
if (!(cin >> l >> u)) return 0;
int tw = 0, cou = 0, se = 0;
// วนลูปเช็คจำนวนเฉพาะ p แต่ละตัวในช่วง [l, u]
for (int p = l; p <= u; p++) {
if (!is_prime[p]) continue;
// เช็ค Twin Prime (ต่างกัน 2)
if ((p - 2 >= 2 && is_prime[p - 2]) || (p + 2 < MAX && is_prime[p + 2])) {
tw++;
}
// เช็ค Cousin Prime (ต่างกัน 4)
if ((p - 4 >= 2 && is_prime[p - 4]) || (p + 4 < MAX && is_prime[p + 4])) {
cou++;
}
// เช็ค Sexy Prime (ต่างกัน 6)
if ((p - 6 >= 2 && is_prime[p - 6]) || (p + 6 < MAX && is_prime[p + 6])) {
se++;
}
}
cout << tw << "\n";
cout << cou << "\n";
cout << se << "\n";
return 0;
}