class GfG {
// function to calculate base^expo
// returns early if result exceeds the
// given limit to avoid overflow
static int power(int base, int expo, int limit) {
int result = 1;
for (int i = 0; i < expo; i++) {
result *= base;
if (result > limit)
return result;
}
return result;
}
// function to find the
// n-th root of m
static int nthRoot(int n, int m) {
// n-th root of 0 is 0
if (m == 0) return 0;
// If n is 1, the answer
// is m itself
if (n == 1) return m;
// binary search to find
// the integer root
int low = 1, high = m;
while (low <= high) {
int mid = (low + high) / 2;
// compute mid^n and compare it with m
int val = power(mid, n, m);
if (val == m)
return mid;
else if (val < m)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
public static void main
(String[] args
) { int n = 3, m = 27;
int result = nthRoot(n, m);
}
}
Y2xhc3MgR2ZHIHsKCiAgICAvLyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYmFzZV5leHBvIAogICAgLy8gcmV0dXJucyBlYXJseSBpZiByZXN1bHQgZXhjZWVkcyB0aGUgCiAgICAvLyBnaXZlbiBsaW1pdCB0byBhdm9pZCBvdmVyZmxvdwogICAgc3RhdGljIGludCBwb3dlcihpbnQgYmFzZSwgaW50IGV4cG8sIGludCBsaW1pdCkgewogICAgICAgIGludCByZXN1bHQgPSAxOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwbzsgaSsrKSB7CiAgICAgICAgICAgIHJlc3VsdCAqPSBiYXNlOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJlc3VsdCA+IGxpbWl0KSAgCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIC8vIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIAogICAgLy8gbi10aCByb290IG9mIG0KICAgIHN0YXRpYyBpbnQgbnRoUm9vdChpbnQgbiwgaW50IG0pIHsKICAgICAgICAvLyBuLXRoIHJvb3Qgb2YgMCBpcyAwCiAgICAgICAgaWYgKG0gPT0gMCkgcmV0dXJuIDA7CgogICAgICAgIC8vIElmIG4gaXMgMSwgdGhlIGFuc3dlciAKICAgICAgICAvLyBpcyBtIGl0c2VsZgogICAgICAgIGlmIChuID09IDEpIHJldHVybiBtOwoKICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgCiAgICAgICAgLy8gdGhlIGludGVnZXIgcm9vdAogICAgICAgIGludCBsb3cgPSAxLCBoaWdoID0gbTsKICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKICAgICAgICAgICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CgogICAgICAgICAgICAvLyBjb21wdXRlIG1pZF5uIGFuZCBjb21wYXJlIGl0IHdpdGggbQogICAgICAgICAgICBpbnQgdmFsID0gcG93ZXIobWlkLCBuLCBtKTsKCiAgICAgICAgICAgIGlmICh2YWwgPT0gbSkKICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7ICAKICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgbSkKICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7ICAKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7IAogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnQgbiA9IDMsIG0gPSAyNzsgIAogICAgICAgIAogICAgICAgIGludCByZXN1bHQgPSBudGhSb290KG4sIG0pOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOyAKICAgIH0KfQ==