fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <random>
  4. #include <map>
  5. #include <cmath>
  6. #include <complex>
  7.  
  8. using namespace std;
  9.  
  10. double cube_dist(double x) {
  11. using namespace std::complex_literals;
  12.  
  13. double q_2 = 2*x-1;
  14. double Q = -1 + q_2*q_2;
  15. double Q2=sqrt(-Q);
  16. std::complex<double> alpha = pow(std::complex<double>(-q_2, Q2), 1./3);
  17. std::complex<double> beta = pow(std::complex<double>(-q_2,-Q2), 1./3);
  18. return ((-(alpha+beta) - 1i * sqrt(3.)*(alpha-beta))/2.).real();
  19. }
  20.  
  21. int main([[maybe_unused]] int argc,
  22. [[maybe_unused]] const char* argv[])
  23. {
  24. default_random_engine gen{random_device{}()};
  25. uniform_real_distribution<double> dis(0, 1.0);
  26.  
  27. map<int,int> m;
  28.  
  29. std::complex<double> q=-9;
  30.  
  31. std::cout << pow(q,1/3) << std::endl;
  32.  
  33. for(int i = 0; i < 1000000; ++i)
  34. {
  35. double d = cube_dist(dis(gen));
  36. int r = round(d*60);
  37. m[r]++;
  38. }
  39.  
  40. for(auto q: m)
  41. {
  42. cout << setw(3) << q.first << " ; " << setw(7) << q.second << endl;
  43. }
  44.  
  45. }
  46.  
Success #stdin #stdout 0.59s 4388KB
stdin
Standard input is empty
stdout
(1,0)
-60 ;       56
-59 ;      386
-58 ;      823
-57 ;     1249
-56 ;     1636
-55 ;     1997
-54 ;     2367
-53 ;     2834
-52 ;     3164
-51 ;     3407
-50 ;     3817
-49 ;     4213
-48 ;     4529
-47 ;     4767
-46 ;     5235
-45 ;     5578
-44 ;     5793
-43 ;     6050
-42 ;     6401
-41 ;     6702
-40 ;     6933
-39 ;     7246
-38 ;     7494
-37 ;     7715
-36 ;     8094
-35 ;     8188
-34 ;     8590
-33 ;     8642
-32 ;     8950
-31 ;     9058
-30 ;     9258
-29 ;     9488
-28 ;     9868
-27 ;    10020
-26 ;    10210
-25 ;    10321
-24 ;    10739
-23 ;    10621
-22 ;    10765
-21 ;    10937
-20 ;    11034
-19 ;    11123
-18 ;    11390
-17 ;    11353
-16 ;    11445
-15 ;    11524
-14 ;    11808
-13 ;    11992
-12 ;    12110
-11 ;    11931
-10 ;    12028
 -9 ;    12141
 -8 ;    12312
 -7 ;    12433
 -6 ;    12557
 -5 ;    12411
 -4 ;    12519
 -3 ;    12265
 -2 ;    12587
 -1 ;    12587
  0 ;    12554
  1 ;    12500
  2 ;    12526
  3 ;    12571
  4 ;    12404
  5 ;    12378
  6 ;    12426
  7 ;    12189
  8 ;    12173
  9 ;    12141
 10 ;    12116
 11 ;    12149
 12 ;    12179
 13 ;    11709
 14 ;    11853
 15 ;    11720
 16 ;    11678
 17 ;    11523
 18 ;    11435
 19 ;    11311
 20 ;    11002
 21 ;    11172
 22 ;    10799
 23 ;    10706
 24 ;    10558
 25 ;    10278
 26 ;    10245
 27 ;     9987
 28 ;     9889
 29 ;     9665
 30 ;     9330
 31 ;     9116
 32 ;     8900
 33 ;     8688
 34 ;     8474
 35 ;     8254
 36 ;     7932
 37 ;     7829
 38 ;     7573
 39 ;     7187
 40 ;     6859
 41 ;     6566
 42 ;     6372
 43 ;     6070
 44 ;     5777
 45 ;     5391
 46 ;     5132
 47 ;     4791
 48 ;     4540
 49 ;     4086
 50 ;     3821
 51 ;     3375
 52 ;     3040
 53 ;     2831
 54 ;     2387
 55 ;     2045
 56 ;     1622
 57 ;     1209
 58 ;      780
 59 ;      441
 60 ;       55