可能不是正解!
由于k>=1,n-pow(m, k)显然单调,于是想着二分查找第一个n-pow(m, k)大于0的m,然后比较此时二分结束的l和l - 1,答案m一定在这两之中
用Python写就不需要实现高精度了,记得用PyPy3解释器,Python3解释器太慢了
import sys
input = lambda : sys.stdin.readline().strip()
def quick_power(a, b):
res = 1
while b != 0:
if b & 1:
res *= a
a = a * a
b //= 2
return res
ans = []
t = int(input())
for i in range(t):
n, k = map(int, input().split())
if k == 1:
ans.append(n)
continue
elif k >= 65:
ans.append(1)
continue
l, r = 1, 10 ** 9
while l < r:
mid = (l + r) // 2
if n - quick_power(mid, k) > 0:
l = mid + 1
else:
r = mid
if abs(n - quick_power(l - 1, k)) < abs(n - quick_power(l, k)):
ans.append(l - 1)
else:
ans.append(l)
print("\n".join(map(str, ans)))

京公网安备 11010502036488号