Try   HackMD

如何用python解立方根?

E1060015 林易增

前言:若某正數x的三次方為a,則我們稱x為a的立方根。當我們只得知一個正數a,要尋找a的立方根x,需要從x=0開始找起,直到找到x的三次方最接近正數a的數,即為找到立方根。
運用到的程式語法:加、減、乘、while迴圈、float、print。

利用python的基本做法:
1.先設定輸入一個正數a
2.立方根x初始值設為0開始尋找
3.利用while迴圈,讓立方根x的三次方(立方根乘以三次),若是小於正數a,則將立方根x加0.0001,再乘三次方,直到立方根x的三次方大於正數a,即停止。
4.此時輸出的x即為正數a的立方根。
程式碼如下:

#解非負數立方根 a=float(input('請輸入一個正數:')) x=0.0 while(x*x*x<=a): x=x+0.0001 x=x-0.0001 print(f'{a}的立方根為:{"%.4f"%x}')

輸入正數a=101, 可得到立方根x=4.6570

是否有更好的做法呢?
利用上述的基本的做法,可以發現要執行的次數非常多。讓我們在程式碼中加入一個變數k來計算執行次數,如下:

#解非負立方根 a=float(input('請輸入一個正數:')) x=0.0 k=0 #k計算執行次數 while(x*x*x<=a): x=x+0.0001 k=k+1 x=x-0.0001 print(f'{a}的立方根為:{"%.4f"%x}') print(f'總共執行{k}次')

輸入同樣的正數a=101,得到立方根x=4.6570,而執行次數達到46571次

然而,若是我們重新修改程式,先從整數開始逼近,確定最接近的整數立方根後,再加入小數點第一位0.1,直到最接近的小數點第一位後,再加入小數點第二位0.01,以此類推

程式碼下:

#解非負立方根(用整數逼近) a=float(input('請輸入一個正數:')) x=0.0 k=0 #k計算執行次數 while(x*x*x<=a): x=x+1 k=k+1 x=x-1 k=k+1 while(x*x*x<=a): x=x+0.1 k=k+1 x=x-0.1 k=k+1 while(x*x*x<=a): x=x+0.01 k=k+1 x=x-0.01 k=k+1 while(x*x*x<=a): x=x+0.001 k=k+1 x=x-0.001 k=k+1 while(x*x*x<=a): x=x+0.0001 k=k+1 x=x-0.0001 k=k+1 print(f'{a}的立方根為:{"%.4f"%x}') print(f'總共執行{k}次')

同樣輸入正數a=101, 可得到立方根x=4.6570,但執行次數僅需32次,遠少於基本做法,而有更高的效率。