fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define endl '\n'
  4. #define int long long
  5. const int MOD = pow(10,9)+7;
  6. const int MOD2 = 998244353;
  7. const int INF = LLONG_MAX/2;
  8.  
  9. int primes[1000000];
  10.  
  11. void seive(){
  12. fill(primes, primes + 1000000, 1);
  13. primes[0] = primes[1] = 0;
  14. for(int i = 2 ; i*i < 1000000 ; i++){
  15. if(primes[i]){
  16. for(int j = i*i ; j < 1000000 ; j += i){
  17. primes[j] = 0;
  18. }
  19. }
  20. }
  21. }
  22. int factorial(int n){
  23. if(n==0){
  24. return 1;
  25. }
  26. return (n*(factorial(n-1)))%MOD;
  27. }
  28. bool isPrime(int n){
  29. if(n <= 1) return false;
  30. for(int i = 2 ; i*i <= n ; i++){
  31. if(n % i == 0) return false;
  32. }
  33. return true;
  34. }
  35.  
  36. int power(int a, int b){
  37. if(b == 0) return 1;
  38. a %= MOD;
  39. int value = power(a, b / 2);
  40. if(b % 2 == 0){
  41. return (value * value) % MOD;
  42. } else {
  43. return ((value * value) % MOD * (a % MOD)) % MOD;
  44. }
  45. }
  46.  
  47. int gcd(int a, int b){
  48. if(a == 0) return b;
  49. return gcd(b % a, a);
  50. }
  51. void dfs(int node , vector<int>A[] , int visited[] , int sum[] , int parent[] , int values[]){
  52. visited[node] = 1;
  53. for(auto node1 : A[node]){
  54. if(!visited[node1]){
  55. parent[node1] = node;
  56. dfs(node1,A,visited,sum,parent,values);
  57. }
  58. }
  59. int s = 0;
  60. for(auto node1 : A[node]){
  61. if(parent[node]!=node1){
  62. s = max(s,sum[node1]);
  63. }
  64. }
  65. sum[node] = values[node]+s;
  66. }
  67. int spf[1000001];
  68. void SPF(){
  69. for(int i = 2 ; i<=1000000 ; i++){
  70. spf[i] = i;
  71. }
  72. for(int i = 2 ; i<=sqrt(1000000) ; i++){
  73. if(spf[i]==i){
  74. for(int j = i*i ; j<=1000000 ; j+=i){
  75. if(spf[j]==j){
  76. spf[j] = i;
  77. }
  78. }
  79. }
  80. }
  81. }
  82. void solve() {
  83. int n,m;
  84. cin>>n>>m;
  85. int ans = -1;
  86. int l = 1 , r = m;
  87. while(l<=r){
  88. int mid = (l + (r-l)/2);
  89. int a = mid;
  90. for(int i = 1 ; i<n ; i++){
  91. a *= mid;
  92. if(a > m){
  93. break;
  94. }
  95. }
  96. if(a == m){
  97. ans = mid;
  98. break;
  99. }
  100. if(a>mid){
  101. r = mid-1;
  102. }
  103. else{
  104. l = mid+1;
  105. }
  106. }
  107. cout<<ans<<endl;
  108. }
  109.  
  110. signed main(){
  111. ios::sync_with_stdio(false); cin.tie(NULL);
  112. SPF();
  113. //int t;
  114. //cin >> t;
  115. //while(t--){
  116. solve();
  117. //}
  118. return 0;
  119. }
Success #stdin #stdout 0.02s 12620KB
stdin
3 27
stdout
3