import java.math.BigInteger;
class NthRoot {
public static void main
(String[] args
) { example(7, "100001232101001010120320");
}
private static void example
(int n,
String xstr
) { System.
out.
println("floor(" + x
+ "^(1/" + n
+ ")) = " + y
); System.
out.
println(y
+ "^" + n
+ " = " + z
); System.
out.
println(y1
+ "^" + n
+ " = " + z1
); }
for (int m = (x.bitLength() - 1)/n; m >= 0; --m) {
int cmp = z.pow(n).compareTo(x);
if (cmp == 0) return z; // found exact root
if (cmp < 0) y = z; // keep bit set
}
return y; // return floor of exact root
}
}
aW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwoKY2xhc3MgTnRoUm9vdCB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewoJCWV4YW1wbGUoNywgIjEwMDAwMTIzMjEwMTAwMTAxMDEyMDMyMCIpOwoJfQoJcHJpdmF0ZSBzdGF0aWMgdm9pZCBleGFtcGxlKGludCBuLCBTdHJpbmcgeHN0cikgewoJCUJpZ0ludGVnZXIgeCA9IG5ldyBCaWdJbnRlZ2VyKHhzdHIpOwoJICAgIEJpZ0ludGVnZXIgeSA9IHJvb3QobiwgeCk7CgkgICAgQmlnSW50ZWdlciB6ID0geS5wb3cobik7CgkgICAgQmlnSW50ZWdlciB5MSA9IHkuYWRkKEJpZ0ludGVnZXIuT05FKTsKCSAgICBCaWdJbnRlZ2VyIHoxID0geTEucG93KG4pOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiZmxvb3IoIiArIHggKyAiXigxLyIgKyBuICsgIikpID0gIiArIHkpOwoJCVN5c3RlbS5vdXQucHJpbnRsbih5ICsgIl4iICsgbiArICIgPSAiICsgeik7CgkJU3lzdGVtLm91dC5wcmludGxuKHkxICsgIl4iICsgbiArICIgPSAiICsgejEpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJfQoJcHJpdmF0ZSBzdGF0aWMgQmlnSW50ZWdlciByb290KGludCBuLCBCaWdJbnRlZ2VyIHgpIHsKCQlCaWdJbnRlZ2VyIHkgPSBCaWdJbnRlZ2VyLlpFUk87CgkJZm9yIChpbnQgbSA9ICh4LmJpdExlbmd0aCgpIC0gMSkvbjsgbSA+PSAwOyAtLW0pIHsKCQkJQmlnSW50ZWdlciB6ID0geS5zZXRCaXQobSk7CgkJCWludCBjbXAgPSB6LnBvdyhuKS5jb21wYXJlVG8oeCk7CgkJCWlmIChjbXAgPT0gMCkgcmV0dXJuIHo7IC8vIGZvdW5kIGV4YWN0IHJvb3QKCQkJaWYgKGNtcCA8IDApIHkgPSB6OyAgICAgLy8ga2VlcCBiaXQgc2V0CgkJfQoJCXJldHVybiB5OyAvLyByZXR1cm4gZmxvb3Igb2YgZXhhY3Qgcm9vdAoJfQp9