#include using namespace std; int main(){ long long N , M; cin >> N >> M; double logN = log( N ) , logM = log( M ); int n = logM / logN; n = max( 0 , n - 1 ); // 繰り返し二乗法でNのn乗を計算してN_nに格納。愚直にNをn個掛けても良いがそれより早い。 int exponent = n; long long power = N , N_n = 1; while( exponent > 0 ){ if( exponent % 2 == 1 ){ N_n *= power; } power *= power; exponent /= 2; } // Nのn乗とMを比較し、望ましい不等式が成立している限りnに1を加算する。 while( N_n <= M ){ M /= N; // N_n *= Nだとオーバーフローする。 n++; } // Nのn乗がMを超えたので、nに1を減算する。 n--; cout << n << "\n"; }