#include <bits/stdc++.h>
using namespace std;
vector<int> asal_listesi(int n) {
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;
}
return asallar;
}
vector<pair<long long, int>> carpanlara_ayir(long long n, const vector<int> &asallar) {
vector<pair<long long, int>> asal_carpan_kuvvetleri;
for (long long bolen : asallar) {
if (bolen * bolen > n)
break;
if (n % bolen)
continue;
int us = 0; // Asal üssü
while (n % bolen == 0) {
n /= bolen;
us++;
}
asal_carpan_kuvvetleri.push_back({bolen, us});
}
if (n > 1) {
asal_carpan_kuvvetleri.push_back({n, 1});
}
return asal_carpan_kuvvetleri;
}
int main() {
const int n = 1e8;
auto asallar = asal_listesi(n);
const int sorgu_sayisi = 4e6;
int toplam_asal_carpan_sayisi = 0; // Derleyici optimizasyonlarının önüne geçmek için.
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
for (int ornek = 0; ornek < sorgu_sayisi; ornek++) {
int sayi = uniform_int_distribution<int>(1, n)(rng);
auto asal_carpan_kuvvetleri = carpanlara_ayir(sayi, asallar);
for (auto &[asal, us] : asal_carpan_kuvvetleri)
toplam_asal_carpan_sayisi += us;
}
cout << toplam_asal_carpan_sayisi << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBhc2FsX2xpc3Rlc2koaW50IG4pIHsKICAgIHZlY3Rvcjxib29sPiBhc2FsX21pKG4gKyAxLCAxKTsKICAgIHZlY3RvcjxpbnQ+IGFzYWxsYXI7CiAgICBmb3IgKGludCBpID0gMjsgaSA8PSBuOyBpKyspIHsKICAgICAgICBpZiAoIWFzYWxfbWlbaV0pCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGFzYWxsYXIucHVzaF9iYWNrKGkpOwogICAgICAgIGZvciAoaW50IGsgPSAyICogaTsgayA8PSBuOyBrICs9IGkpCiAgICAgICAgICAgIGFzYWxfbWlba10gPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBhc2FsbGFyOwp9Cgp2ZWN0b3I8cGFpcjxsb25nIGxvbmcsIGludD4+IGNhcnBhbmxhcmFfYXlpcihsb25nIGxvbmcgbiwgY29uc3QgdmVjdG9yPGludD4gJmFzYWxsYXIpIHsKICAgIHZlY3RvcjxwYWlyPGxvbmcgbG9uZywgaW50Pj4gYXNhbF9jYXJwYW5fa3V2dmV0bGVyaTsKICAgIGZvciAobG9uZyBsb25nIGJvbGVuIDogYXNhbGxhcikgewogICAgICAgIGlmIChib2xlbiAqIGJvbGVuID4gbikKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaWYgKG4gJSBib2xlbikKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgaW50IHVzID0gMDsgLy8gQXNhbCDDvHNzw7wKICAgICAgICB3aGlsZSAobiAlIGJvbGVuID09IDApIHsKICAgICAgICAgICAgbiAvPSBib2xlbjsKICAgICAgICAgICAgdXMrKzsKICAgICAgICB9CiAgICAgICAgYXNhbF9jYXJwYW5fa3V2dmV0bGVyaS5wdXNoX2JhY2soe2JvbGVuLCB1c30pOwogICAgfQogICAgaWYgKG4gPiAxKSB7CiAgICAgICAgYXNhbF9jYXJwYW5fa3V2dmV0bGVyaS5wdXNoX2JhY2soe24sIDF9KTsKICAgIH0KICAgIHJldHVybiBhc2FsX2NhcnBhbl9rdXZ2ZXRsZXJpOwp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IGludCBuID0gMWU4OwogICAgYXV0byBhc2FsbGFyID0gYXNhbF9saXN0ZXNpKG4pOwogICAgY29uc3QgaW50IHNvcmd1X3NheWlzaSA9IDRlNjsKICAgIGludCB0b3BsYW1fYXNhbF9jYXJwYW5fc2F5aXNpID0gMDsgLy8gRGVybGV5aWNpIG9wdGltaXphc3lvbmxhcsSxbsSxbiDDtm7DvG5lIGdlw6dtZWsgacOnaW4uCiAgICBtdDE5OTM3IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwogICAgZm9yIChpbnQgb3JuZWsgPSAwOyBvcm5layA8IHNvcmd1X3NheWlzaTsgb3JuZWsrKykgewogICAgICAgIGludCBzYXlpID0gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGludD4oMSwgbikocm5nKTsKICAgICAgICBhdXRvIGFzYWxfY2FycGFuX2t1dnZldGxlcmkgPSBjYXJwYW5sYXJhX2F5aXIoc2F5aSwgYXNhbGxhcik7CiAgICAgICAgZm9yIChhdXRvICZbYXNhbCwgdXNdIDogYXNhbF9jYXJwYW5fa3V2dmV0bGVyaSkKICAgICAgICAgICAgdG9wbGFtX2FzYWxfY2FycGFuX3NheWlzaSArPSB1czsKICAgIH0KICAgIGNvdXQgPDwgdG9wbGFtX2FzYWxfY2FycGFuX3NheWlzaSA8PCAiXG4iOwp9