请你找到最小的正整数
第一行有一个整数。
随后行,每行两个整数
。
输出行,每行一个正整数
。
3 6 2 1 1 78 3
2 1 4
3 114 514 1000000000 2 1000000000000000000 3
1 31623 1000000
如果你使用 python 编写代码,请提交到 pypy3
本题数比较大,所以可以用py解决,但是py也需要特判三个点,不然会超时
k=1时直接输出n
k>60直接输出1,因为(2**61 > 1e18),大于 60 的 k,整数根可能只有 1
n=1直接输出1
代码如下:
作者:pandaC222def fastpow(a,b): ans=1 while b!=0: if b&1: ans*=a b>>=1 a*=a return ans t=int(input()) for _ in range(t): n,k=map(int,input().split()) if k==1: print(n) continue if n==1&nbs***bsp;k>60: print(1) continue l=0 r=10**18 while l+1<r: mid=(l+r)//2 if fastpow(mid,k)<=n: l=mid else: r=mid res1=abs(n-fastpow(l,k)) res2=abs(n-fastpow(l+1,k)) if res1>res2: print(l+1) else: print(l)