fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int> en_kucuk_asal_carpan_listesi(long long n) {
  5. vector<int> en_kucuk_asal_carpan(n + 1);
  6. for (int i = 2; i <= n; i++) {
  7. if (en_kucuk_asal_carpan[i])
  8. continue;
  9. en_kucuk_asal_carpan[i] = i;
  10. for (int k = 2 * i; k <= n; k += i) {
  11. if (!en_kucuk_asal_carpan[k])
  12. en_kucuk_asal_carpan[k] = i;
  13. }
  14. }
  15. return en_kucuk_asal_carpan;
  16. }
  17.  
  18. vector<pair<int, int>> carpanlara_ayir(int n, const vector<int> &en_kucuk_asal_carpan) {
  19. vector<pair<int, int>> asal_carpan_kuvvetleri;
  20. while (n > 1) {
  21. int asal_carpan = en_kucuk_asal_carpan[n];
  22. int us = 0;
  23. while (n % asal_carpan == 0) {
  24. n /= asal_carpan;
  25. us++;
  26. }
  27. asal_carpan_kuvvetleri.push_back({asal_carpan, us});
  28. }
  29. return asal_carpan_kuvvetleri;
  30. }
  31.  
  32. int main() {
  33. const int n = 1e8;
  34. auto en_kucuk_asal_carpan = en_kucuk_asal_carpan_listesi(n);
  35. const int sorgu_sayisi = 4e6;
  36. int toplam_asal_carpan_sayisi = 0; // Derleyici optimizasyonlarının önüne geçmek için.
  37. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  38. for (int ornek = 0; ornek < sorgu_sayisi; ornek++) {
  39. int sayi = uniform_int_distribution<int>(1, n)(rng);
  40. auto asal_carpan_kuvvetleri = carpanlara_ayir(sayi, en_kucuk_asal_carpan);
  41. for (auto &[asal, us] : asal_carpan_kuvvetleri)
  42. toplam_asal_carpan_sayisi += us;
  43. }
  44. cout << toplam_asal_carpan_sayisi << "\n";
  45. }
Success #stdin #stdout 3.57s 393504KB
stdin
Standard input is empty
stdout
15695600