kdzhr

Квадраты и кубы final

Mar 13th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. // OK first tour region 17-18 B
  2.  
  3. # include <iostream>
  4. # include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. uint64_t pow2(uint64_t n) {
  9. uint64_t left = 1;
  10. uint64_t right = min(n, static_cast<uint64_t>(1'000'000'001));
  11. while (right - left > 1) {
  12. uint64_t mid = (left + right) / 2;
  13. if (mid * mid > n) {
  14. right = mid;
  15. } else {
  16. left = mid;
  17. }
  18. }
  19. return left;
  20. }
  21.  
  22. uint64_t pow2_ceil(int64_t n) {
  23. if (n < 1) {
  24. return 1;
  25. }
  26. uint64_t left = 1;
  27. uint64_t right = min(n, static_cast<int64_t>(1'000'000'000));
  28. while (right - left > 1) {
  29. uint64_t mid = (left + right) / 2;
  30. if (mid * mid < n) {
  31. left = mid;
  32. } else {
  33. right = mid;
  34. }
  35. }
  36. return right;
  37. }
  38.  
  39. int main() {
  40. int64_t a, b, k;
  41. cin >> a;
  42. cin >> b;
  43. cin >> k;
  44. int64_t res = 0;
  45. uint64_t pow_a = pow2_ceil(a);
  46. uint64_t pow_b = pow2(b);
  47. for (int64_t i = 1; i * i * i <= b; i++) {
  48. if (i * i * i < a) continue;
  49. int64_t left = max(pow2_ceil(i * i * i - k), pow_a);
  50. int64_t right = min(pow2(i * i * i + k), pow_b);
  51. res += max(right - left + 1, static_cast<int64_t>(0));
  52. }
  53. cout << res;
  54. return 0;
  55. }
Add Comment
Please, Sign In to add comment