fork download
  1. #include <iostream>
  2. #include <tuple>
  3. using namespace std;
  4.  
  5. #define int64 long long
  6.  
  7. const long double log[6] = {0.0, 0.0, 0.6931471805599453094172, 1.0986122886681096913952, 0.0, 1.6094379124341003746007};
  8. const long double eps = 0.00000000001;
  9.  
  10. int number = 0;
  11.  
  12. tuple<int64, int64, int64, int64> solve(long double mx) {
  13. number++;
  14. int64 rez = 0;
  15. int nr2 = 0, nr3 = 0, nr5 = 0;
  16. int here2, here3, here5 = 0;
  17. for (long double exp5 = 0.0; exp5 < mx; exp5 += log[5], here5++) {
  18. here3 = 0;
  19. for (long double exp3 = 0.0; exp3 + exp5 < mx; exp3 += log[3], here3++) {
  20. here2 = int((mx - exp5 - exp3) / log[2] + eps);
  21. nr3 += here3 * (here2 + 1);
  22. nr5 += here5 * (here2 + 1);
  23. nr2 += here2 * (here2 + 1) / 2;
  24. rez += here2 + 1;
  25. }
  26.  
  27. }
  28. return make_tuple(rez, nr2, nr3, nr5);
  29. }
  30.  
  31. tuple<long double, int64, int64, int64> findNumber(int64 n, long double rez = 0.0) {
  32. long double p = 1.0;
  33. int64 nr;
  34. int64 n2, n3, n5;
  35.  
  36. while (1) {
  37. tie(nr, n2, n3, n5) = solve(rez + p + eps);
  38. if (nr <= n) {
  39. rez += p;
  40. p *= 2.0;
  41. } else {
  42. p /= 2.0;
  43. break;
  44. }
  45. }
  46.  
  47. while (p > eps) {
  48. tie(nr, n2, n3, n5) = solve(rez + p + eps);
  49. if (nr <= n) {
  50. rez += p;
  51. }
  52. p /= 2.0;
  53. }
  54.  
  55. tie(nr, n2, n3, n5) = solve(rez);
  56. return make_tuple(rez, n2, n3, n5);
  57. }
  58.  
  59. int main() {
  60. int64 n;
  61. // cin >> n;
  62. n = 100000000LL;
  63. int64 n2a, n3a, n5a;
  64. int64 n2b, n3b, n5b;
  65. long double rez;
  66. tie(rez, n2b, n3b, n5b) = findNumber(n - 1);
  67. tie(rez, n2a, n3a, n5a) = findNumber(n, rez - eps);
  68.  
  69. // the number is 2^ * 3^ * 4^
  70. cout << n2a - n2b << '\t' << n3a - n3b << '\t' << n5a - n5b << '\n';
  71. return 0;
  72. }
  73.  
Success #stdin #stdout 0.48s 3096KB
stdin
Standard input is empty
stdout
2	454	249