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