#include <iostream>
#include <iomanip>
#include <random>
#include <map>
#include <cmath>
#include <complex>
using namespace std;
double cube_dist(double x) {
using namespace std::complex_literals;
double q_2 = 2*x-1;
double Q = -1 + q_2*q_2;
double Q2=sqrt(-Q);
std::complex<double> alpha = pow(std::complex<double>(-q_2, Q2), 1./3);
std::complex<double> beta = pow(std::complex<double>(-q_2,-Q2), 1./3);
return ((-(alpha+beta) - 1i * sqrt(3.)*(alpha-beta))/2.).real();
}
int main([[maybe_unused]] int argc,
[[maybe_unused]] const char* argv[])
{
default_random_engine gen{random_device{}()};
uniform_real_distribution<double> dis(0, 1.0);
map<int,int> m;
std::complex<double> q=-9;
std::cout << pow(q,1/3) << std::endl;
for(int i = 0; i < 1000000; ++i)
{
double d = cube_dist(dis(gen));
int r = round(d*60);
m[r]++;
}
for(auto q: m)
{
cout << setw(3) << q.first << " ; " << setw(7) << q.second << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y29tcGxleD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgY3ViZV9kaXN0KGRvdWJsZSB4KSB7Cgl1c2luZyBuYW1lc3BhY2Ugc3RkOjpjb21wbGV4X2xpdGVyYWxzOwoJCiAgICBkb3VibGUgcV8yID0gMip4LTE7Cglkb3VibGUgUSA9IC0xICsgcV8yKnFfMjsKCWRvdWJsZSBRMj1zcXJ0KC1RKTsKCXN0ZDo6Y29tcGxleDxkb3VibGU+IGFscGhhID0gcG93KHN0ZDo6Y29tcGxleDxkb3VibGU+KC1xXzIsIFEyKSwgMS4vMyk7CglzdGQ6OmNvbXBsZXg8ZG91YmxlPiBiZXRhICA9IHBvdyhzdGQ6OmNvbXBsZXg8ZG91YmxlPigtcV8yLC1RMiksIDEuLzMpOwoJcmV0dXJuICgoLShhbHBoYStiZXRhKSAtIDFpICogc3FydCgzLikqKGFscGhhLWJldGEpKS8yLikucmVhbCgpOwp9CgppbnQgbWFpbihbW21heWJlX3VudXNlZF1dIGludCBhcmdjLAogICAgICAgICBbW21heWJlX3VudXNlZF1dIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKewogICAgZGVmYXVsdF9yYW5kb21fZW5naW5lIGdlbntyYW5kb21fZGV2aWNle30oKX07CiAgICB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPGRvdWJsZT4gZGlzKDAsIDEuMCk7CgogICAgbWFwPGludCxpbnQ+IG07CiAgICAKCXN0ZDo6Y29tcGxleDxkb3VibGU+IHE9LTk7CgkKCXN0ZDo6Y291dCA8PCBwb3cocSwxLzMpIDw8IHN0ZDo6ZW5kbDsKCQogICAgZm9yKGludCBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKICAgIHsKICAgICAgICBkb3VibGUgZCA9IGN1YmVfZGlzdChkaXMoZ2VuKSk7CiAgICAgICAgaW50IHIgPSByb3VuZChkKjYwKTsKICAgICAgICBtW3JdKys7CiAgICB9CgogICAgZm9yKGF1dG8gcTogbSkKICAgIHsKICAgICAgICBjb3V0IDw8IHNldHcoMykgPDwgcS5maXJzdCA8PCAiIDsgICIgPDwgc2V0dyg3KSA8PCBxLnNlY29uZCA8PCBlbmRsOwogICAgfQoKfQo=