fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. long long n, m, left, right, mid, power, root, i;
  6. bool tooBig;
  7.  
  8. cin >> n >> m;
  9.  
  10. if(m == 0) { cout << 0 << endl; return 0; }
  11. if(n == 1) { cout << m << endl; return 0; }
  12.  
  13. left = 1;
  14. right = m;
  15. root = -1;
  16.  
  17. while(left <= right) {
  18. mid = (left + right) / 2;
  19. power = 1;
  20. tooBig = false;
  21.  
  22. for(i = 0; i < n; i++) {
  23. if(power > m / mid) {
  24. tooBig = true;
  25. break;
  26. }
  27. power *= mid;
  28. }
  29.  
  30. if(!tooBig && power == m) {
  31. root = mid;
  32. break;
  33. }
  34. else if(!tooBig && power < m) {
  35. left = mid + 1;
  36. }
  37. else {
  38. right = mid - 1;
  39. }
  40. }
  41.  
  42. cout << root << endl;
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0.01s 5320KB
stdin
3 27
stdout
3