1. 程式人生 > >【BZOJ】1213 [HNOI2004]高精度開根

【BZOJ】1213 [HNOI2004]高精度開根

Description

曉華所在的工作組正在編寫一套高精度科學計算的軟體,一些簡單的部分如高精度加減法、乘除法早已寫完了,現在就剩下曉華所負責的部分:實數的高精度開m次根。因為一個有理數開根之後可能得到一個無理數,所以這項工作是有較大難度的。現在要做的只是這項工作的第一步:只對自然數進行開整數次根,求出它的一個非負根,並且不考慮結果的小數部分,只要求把結果截斷取整即可。程式需要根據給定的輸入,包括需要開根的次數,以及被開根的整數;計算出它的非負根取整後的結果。

Input

共有兩行,每行都有一個整數,並且輸入中沒有多餘的空格:第一行有一個正整數m(1<=m<=50),表示要開的根次;第二行有一個整數n

(0<=n<=1010000),表示被開根的數。

Output

只有一行,包括一個數,即為開根取整後的結果。

Solution

看到裸高精就跑進來了=w=
然後太懶於是上python,但python自帶的開方精度比較魔幻,於是二分一下

m,n=int(input()),int(input())
l,r=0,1
while r**m<=n:
    l=r
    r=r*2
while l<r:
    mid=(l+r)//2
    if mid**m<=n:
        l=mid+1
    else:
        r=mid
print l-1