除法豎式演算法的原理是什麼?

時間 2021-06-05 22:11:58

1樓:

我們知道,乙個數恰好整除另乙個數是比較難得的,更多的是出現餘數不為 的情況。於是就有了所謂的帶餘除法。用 去除 ,商數是 ,餘數是 :

舉個具體的例子更好看。33÷7,商為4,餘數為5: 。

這個帶餘除法和豎式計算有什麼關係呢?你回想一下豎式計算過程,就會發現其實每一步都做了乙個簡單的帶餘除法。

我不知道怎麼用 把豎式計算過程排版出來,所以你自己在紙上寫個例子吧,比如算222÷7。

你首先考慮的是2÷7,結果不夠除,也就是商為0。於是你轉而考慮22÷7,得到商為3,餘數為1。然後把這個餘數1和最後一位2合起來得到12,用12÷7,得到商為1,餘數為5。

把兩次的商按順序合起來,就得到了最終結果222÷7=31……5。

但這裡有些東西沒解釋清楚,比如為什麼要把兩次的商按順序合起來?2不夠除7時為什麼就換成了22除7?最大的謎題是,我每一步的帶餘除法拼起來為什麼就得到了最終的結果,畢竟這裡每一步的計算看上去都和要求的222÷7無關。

這裡就涉及到十進位制的用處了。還是以222÷7為例。

做計算之前,商數q是不知道的,但我們很容易看出來它不可能達到三位數。因為三位數至少是100,再乘以7,明顯超過222了。//這就是豎式計算的第一步,2不夠除7。

根據上面所說,商數q最多就是兩位數,記它的十位上是a,個位上是b,即有

現在按照帶餘除法就有

考慮222除70的帶餘除法。//這時候就有了22÷7。

簡單試幾下,就能知道a取3,於是有

// 這一步就是商數3和餘數1的由來。

再考慮12除7的帶餘除法,很明顯它只能是b=1,r=5。//這就是商數為1,餘數為5的由來。

至於最後的商數21為什麼是前兩個商按順序的組合,因為我們前面已經假定了a=3在十位,b=1在個位。//到這裡就完成了整個計算。

其他情況同理,就是寫出來比較麻煩,你可以自己寫個試試。

2樓:南中國海的一條魚

簡單說一下加、減、乘法的原理:

加法豎式計算的原理是交換律和結合律,因為每乙個數(特別是有理數),都可以寫成如下形式

其中, ,而兩個數相加則是進行這樣的運算

將求和符號展開,然後交換各項,把10的指數相同的兩項放在一起,然後再運用結合律,加上括號,計算結果如果超過9,也就是有了進製,就把進製分離出來,把進製放到和進製的10的指數相同的那兩項那裡。這就是加法豎式計算的原理。

減法豎式的計算原理與加法實際上是相同的,只不過如果遇到較小數減較大數的情形,就需要「借位」——也就是加法的交換律和結合律的再次運用,然後每個10的指數相同的兩項相減,結果相加,得到最終的結果。不過借位也有乙個有意思的地方,就是如果需要借位的前一位是零,那就要連續向前「點兩個點」,其實質是(以 舉例)

是負數,而豎式計算的各位不能是負數,因此需要借位,然而十位是 ,借位意味著自己就變成負數了,因此十位只能向百位借位,這樣就有

然後個位就可以向十位借位了,即

(這也是找0所在位借位,0在之後的計算當作9的原因)

於是這個計算就一目了然了

乘法的原理與加減法不同,它首先基於乘法對加法的分配律(不要稱其為「乘法分配律」,稱為「分配律」即可),最後得到的結果相加,用的就是加法計算的豎式計算原理。

除法的原理也是分配律,除法分配律只能操作被除數,不能操作除數,除法分配律的表示式是

除法的豎式計算,就是把被除數分成幾個除數的倍數分別進行除法運算的過程,而除法過程中的商和除數相乘,被除數與之前乘積相減的過程,實際上就是拆數的過程。

除法要計算的是商,而豎式計算就是通過求出各位的商來求出最終結果的,因此運用除法分配律拆數的時候要遵循這一原則,也就是逐位求商的原則,須知每一位數都是0~9範圍內的正整數。

舉乙個例子,

首先,需要把這個數拆成各個位的數相加的形式,然後每一位都分別除以 ,即

這其實就是除法豎式計算中為什麼商和被除數要逐位對齊的原理所在。

我們繼續,要注意豎式計算計算的是商的每一位數,而除法的過程通常就是我們所說的「試商」的過程,試商的目的在於求出這一位的商以確保這一位的餘數不超過除數。我們繼續剛才的計算:

這是千位數除以除數,因為太小了,所以商零,並且留下餘數6,然而,乙個數的前導零(即數字最高位前面的零)通常是不需要寫出來的,因此前幾位商零的過程在豎式計算中是不寫出來的。一般的做法是,帶著這個較小的數字和後面的一位組合,一起除以除數(這實際上是餘數與被除數後面幾位結合的過程,後面會講到)。我們知道 67" eeimg="1"/>,因此這個除法就可以轉化為

這也就正好符合我們除法豎式計算的習慣,先計算

其中, 是不能被 整除的,必然帶有餘數,而之前我們提到,豎式計算要計算的是每一位的商,因此這裡不要求把 完整地計算出來,只需計算出其整數部分即可,但必須注意有餘數存在,這就開始需要試商了,假設商為 ,這時可以寫成

呃,我寫了省略號,因為沒算完啊。因為 不等於 ,因此還要求出「餘數」,這就是省略號暫時省略的部分,即求「餘數」的過程,除法的豎式計算過程是,先用這位的商乘餘數,作為減數寫在被除數的下面,然後逐位相減得到餘數,這一過程的原理實際是(注意橫式運算的優先順序是先乘除後加減)

得到的餘數需要繼續作為被除數參與後面的除法運算,而且商 實際上是將被除數拆成了 ,因此後面必須加上「」。

括號裡的那一部分,正好就是我們先商乘除數作為減數,然後被除數減這個減數的過程。計算剛才的式子,得

是的,我是故意商錯的,為的就是講解為什麼餘數需要小於除數,這裡也很清楚地看到, 仍然可以進行上述的運算過程,得到的商的那一部分與剛才的 數字是相同的,我們繼續計算,這次補上 ,即

一眼看出來, ,而且在同乙個數字上。

繼續計算

至此, , 的整數字為零,這一位的商就徹底求出來了。

然後我們再把它代回到最一開始的除法題中,即 中,剛剛我們已經將這個算式等值變換(保持整個算式的運算結果不變的變換)成了

然後就可以將 代入其中,得

這裡我們知道 是商的十位,而 是十位上的餘數,前面可利用乘法分配律展開,寫成

其中 表示商的十位是 ,後面的 是十位上的餘數,但除法運算並沒有完結,至少整個算式的整數部分還沒求出來呢。因此就有了除法豎式後面的運算——將被除數後面的幾位「落下來」,拼成新的被除數,計算後面各位的商,實際上這是除法分配律的反向運用。文字說明可能不太容易看懂,我們不妨繼續剛才的計算過程

(十位上的餘數與個位結合,形成個位上的被除數,因此中間的 變成了 )

接下來還是試商法,這次直接用準確結果 ,這個雖然是整除的,但是我還是需要把計算出豎式最下端的 的過程寫出來,繼續

這裡求出餘數為 ,但除法很多都是有餘數的,因此還要把餘數表現出來,這樣上面這個式子應該等值變換為

最後計算,

這是最後,整除了,但如果不是整除的情形,就比如一開始我們要計算的 ,最後還有餘數 ,如果這就是一道除法計算題的話,那麼最後的結果應當是這樣個樣子的

,這就是有餘數的除法。

接下來,整數和有限小數,可以看作小數點後面(有限小數最後一位後面)有無窮個零,因此可以繼續添零求商求出商的十分位、百分位、千分位等小數字的值,但一般得到的都是無限迴圈小數,通常不需要計算出來(精確估算也只需計算出其中幾位即可),如果除數的質因數只有 或 ,那麼對應的商才是有限小數。

豎式計算提供了方法,橫式描述闡釋了原理。但闡釋原理所用的橫式太麻煩了,因此就有了豎式計算這個傢伙簡化了橫式推導過程,直接求出結果了。

P. S.:值得一提的是,後面我們做除法的時候,我們一般不上來就豎式,而是先寫成分數並約分。

接下來說一說為什麼除法從最高位除起。這首先要明確,為什麼要採用豎式計算。剛剛講到了豎式計算的原理,即豎式計算所用到的運算定律,以及如何運用這些定律。

豎式計算是對運算定律的運用,而運用的目的在於求出結果中的每一位,因此豎式計算要求相同數字必須對齊,而這個要求則是為了準確求出結果中的每一位數。加法的豎式計算,兩個一位加數對應唯一的一位數;減法的豎式計算,大的數減小的數當然結果唯一,小的數減去大的數,需要通過借位來解決,我們知道 ,這就是說,為了求得一位結果,最多隻需要向更高的一位借1即可,最後的結果,當然也是唯一的。

一位數的乘法,結果是唯一的,一位數的乘法再進行加法,結果也是唯一的,多位數的乘法最後的加法,是加法,每一位都有唯一確定的結果。

根據加、減、乘的豎式運算我們知道,每一位結果都需要唯一確定,那麼除法呢?

我們來看從後往前除(僅說除數是一位數的除法)……

較大的數除以較小的數,比如

如果個位是零,那麼在不借位的時候我們認為個位是 ,則十位將無法繼續運算, 沒有借位的可能。

再比如, ,遇上 ,究竟要向更高一位借多少呢?

從每位數的確定性的角度看,從後向前除是不可能的了,因為拆分數字就已經成為了第乙個難題。而最終使得除法只能從前向後算的,是餘數的存在。餘數產生於低位數,因此也就不能從低位向高位(也就是從後向前)去運算了。

二元甚至多元多項式能進行多項式的豎式除法嗎?

fjdk eim 不能。能做帶餘除法的環叫做Euclidean domain,因為能做帶餘除法就能用歐幾里德演算法求最大公因子。所有實係數的關於x的多項式構成乙個Euclidean domain。給定任意兩個關於x的多項式f x 和g x 一定存在多項式d x 使得任意同時整除f x 和g x 的多...

LSM 演算法的原理是什麼?

記記憶體中的樹為T0,硬碟上的樹按時間順序,記做T1,Tk 讀 T0 Tk Tk 1 T0寫T0T0超過一定大小後,插入硬碟變為Tk 1 複雜度讀 最壞需要讀k 1棵樹,所以需要定期合併,從而使得只有常數棵樹。比較B Tree和LSM Tree,可以發現對於Scan,前者需要O logN 次查詢,而...

量子計算機攻擊密碼演算法的原理是什麼?

asdacs 現代密碼基本都是基於某種數學上求解的困難。以最經典的rsa演算法為例,破解rsa演算法只需要將公鑰進行因數分解。但是一般用作公鑰的數都是兩個非常大的素數 上萬位甚至更大 相乘,破解是能破解,但在現在的計算機上耗時非常長,目前還沒有乙個高效率的解決辦法。事實上,對於大多數密碼而言,只要解...