開立方筆演算法

2021-04-01 08:42:07 字數 1241 閱讀 1795

開立方筆演算法

陳梓瀚今年在某次物理競賽中忘了帶計算器,需要計算開立方。當時不知道怎麼筆算,所以只好一位一位地試。因此,我便想研究出一種開立方的筆算方法(我知道現在有,但是苦於找不到,所以只好自己來了)。

在剛開始研究是我不知道該如何入手,所以就去找了初二時候的代數書,裡面有開平方筆演算法和推導過程。它是這麼寫的:

在這裡,我「定義」a^b=a的b次方。

(10a+b)^2 = 100a^2+20ab+b^2 = 100a^2+b(20a+b)

a代表的是已經計算出來的結果,b代表的是當前需要計算的位上的數。在每次計算過程中,100a^2都被減掉,剩下b(20a+b)。然後需要做的就是找到最大的整數b'使b'(20a+b')<=b(20a+b)。

因此,我就照著書裡的方法,推導開立方筆演算法。

(10a+b)^3 = 1000a^3+300a^2*b+30a*b^2+b^3 = 1000a^3+b[300a^2+b(30a+b)]

如果每次計算後都能減掉1000a^3的話,那麼剩下的任務就是找到最大的整數b',使b'[300a^2+b'(30a+b')]<=b[300a^2+b(30a+b)]。

於是,我就設計了乙個版式。下面就開始使用這個版式來檢驗開立方筆演算法。

例如:147^3=3176523

一開始,如下圖所示,將3176523從個位開始3位3位分開。(3'176'523)

第一步,我們知道,1^3 < 3 < 2^3,所以,第一位應該填1。

1^3 = 1,3 - 1 = 2,餘2,再拖三位,一共是2176。

接下來這一步就比較複雜了。因為我水平有限,我現在還不能把它改造得比較好。

依照「b[300a^2+b(30a+b)]」,所以:

1^2*300=300,1*30=30,如圖上所寫。

第二位就填4,所以上圖3個空位都填4。

然後(34*4+300)*4=1744,2176-1744=432,再拖三位得432523。

然後就照上面一樣,

14^2*300=58800,14*30=420,如上圖所寫。

第三位就填7,所以上圖下邊3個空位都填7。

然後(427*7+58800)*7=432523,432523-432523=0,到此開立方結束。

在我以後的一些實踐中,發現越往後開,300*a^2與b(30a+b)的差距就越大,尋找b的工作就越容易,因為結果中有一項是300*a^2*b。

python 開立方注意事項

在python中,就是指數運算,所以我們習慣性的覺得n 3 n 1 3 確實在數學中,這的確是正確的,但是在python中這麼寫,你就會發現有一些錯誤,4 3 64所以,64開立方應該是3,然而在python中的執行結果如下 64 1 3 3.9999999999999996so interesti...

基於python 開立方的注意事項說明

在python中,就是指數運算,所以我們習慣性的覺得 確實在數學中,這的確是正確的,但是在pyt中這麼寫,你就會發現有一些錯誤,4 3 64 所以,64開立方應該是3,然而在python中的執行結果如下 64 1 3 3.9999999999999996 so interesting,我們在執行 1...

買鉛筆 演算法競賽

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有 3 種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了公平起見,...