高精度开根
二分一下就ok了(一开始人傻了写了三分qwq)
/**************************************************************
Problem: 1213
User: syh0313
Language: Java
Result: Accepted
Time:10232 ms
Memory:22292 kb
****************************************************************/
import
java.math.BigInteger;
import
java.util.Scanner;
public
class
Main
{
public
static
BigInteger po(BigInteger a,
int
b)
{
if
(b==
0
)
return
BigInteger.valueOf(
1
);
if
(b==
1
)
return
a;
BigInteger c=po(a,b/
2
);
if
(b%
2
==
1
)
return
c.multiply(c.multiply(a));
else
return
c.multiply(c);
}
public
static
void
main(String[] args) {
Scanner cin =
new
Scanner(System.in);
int
n; BigInteger x, ans,l, r,mid;
ans=BigInteger.valueOf(
0
);
n = cin.nextInt(); x = cin.nextBigInteger();
l = BigInteger.valueOf(
1
); r=BigInteger.valueOf(
1
);
while
(po(r,n).compareTo(x)<=
0
) {l=r; r=r.multiply(BigInteger.valueOf(
2
));}
while
((r.subtract(l)).compareTo(BigInteger.valueOf(
0
)) >=
0
) {
mid = (r.add(l)).divide(BigInteger.valueOf(
2
));
if
((po(mid,n)).compareTo(x)<=
0
) {ans=mid; l=mid.add(BigInteger.valueOf(
1
));}
else
r=mid.subtract(BigInteger.valueOf(
1
));
}
System.out.println(ans);
}
}