#include <bits/stdc++.h>
using namespace std;
int main() {
const int n = 1e8;
vector<bool> asal_mi(n + 1, 1);
vector<int> asallar;
for (int i = 2; i <= n; i++) {
if (!asal_mi[i])
continue;
asallar.push_back(i);
for (int k = 2 * i; k <= n; k += i)
asal_mi[k] = false;
}
auto araliktaki_asal_sayisi = [&](int l, int r) {
l = max(l, 1);
return upper_bound(asallar.begin(), asallar.end(), r) - lower_bound(asallar.begin(), asallar.end(), l);
};
cout << "[1, " << n << "] araligindaki asal sayisi: " << araliktaki_asal_sayisi(1, n) << "\n";
// https://c...content-available-to-author-only...s.com/blog/entry/61587
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
for (int ornek = 0; ornek < 5; ornek++) {
int l = uniform_int_distribution<int>(1, n)(rng);
int r = uniform_int_distribution<int>(l, n)(rng);
cout << "[" << l << ", " << r << "] araligindaki asal sayisi: " << araliktaki_asal_sayisi(l, r) << "\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IGludCBuID0gMWU4OwogICAgdmVjdG9yPGJvb2w+IGFzYWxfbWkobiArIDEsIDEpOwogICAgdmVjdG9yPGludD4gYXNhbGxhcjsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmICghYXNhbF9taVtpXSkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgYXNhbGxhci5wdXNoX2JhY2soaSk7CiAgICAgICAgZm9yIChpbnQgayA9IDIgKiBpOyBrIDw9IG47IGsgKz0gaSkKICAgICAgICAgICAgYXNhbF9taVtrXSA9IGZhbHNlOwogICAgfQoKICAgIGF1dG8gYXJhbGlrdGFraV9hc2FsX3NheWlzaSA9IFsmXShpbnQgbCwgaW50IHIpIHsKICAgICAgICBsID0gbWF4KGwsIDEpOwogICAgICAgIHJldHVybiB1cHBlcl9ib3VuZChhc2FsbGFyLmJlZ2luKCksIGFzYWxsYXIuZW5kKCksIHIpIC0gbG93ZXJfYm91bmQoYXNhbGxhci5iZWdpbigpLCBhc2FsbGFyLmVuZCgpLCBsKTsKICAgIH07CgogICAgY291dCA8PCAiWzEsICIgPDwgbiA8PCAiXSBhcmFsaWdpbmRha2kgYXNhbCBzYXlpc2k6ICIgPDwgYXJhbGlrdGFraV9hc2FsX3NheWlzaSgxLCBuKSA8PCAiXG4iOwoKICAgIC8vIGh0dHBzOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vYmxvZy9lbnRyeS82MTU4NwogICAgbXQxOTkzNyBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKICAgIGZvciAoaW50IG9ybmVrID0gMDsgb3JuZWsgPCA1OyBvcm5laysrKSB7CiAgICAgICAgaW50IGwgPSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PigxLCBuKShybmcpOwogICAgICAgIGludCByID0gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGludD4obCwgbikocm5nKTsKICAgICAgICBjb3V0IDw8ICJbIiA8PCBsIDw8ICIsICIgPDwgciA8PCAiXSBhcmFsaWdpbmRha2kgYXNhbCBzYXlpc2k6ICIgPDwgYXJhbGlrdGFraV9hc2FsX3NheWlzaShsLCByKSA8PCAiXG4iOwogICAgfQp9
[1, 100000000] araligindaki asal sayisi: 5761455
[59063203, 85872181] araligindaki asal sayisi: 1481609
[5368844, 86446152] araligindaki asal sayisi: 4650544
[33019723, 80252939] araligindaki asal sayisi: 2650467
[62921865, 77346713] araligindaki asal sayisi: 798648
[60495598, 72339556] araligindaki asal sayisi: 657797