帶餘除法

歐幾里得除法（Euclidean division），也稱為帶餘除法（division with remainder），是數學中的一種基本算術計算方式。給定一個被除數和一個除數，帶餘除法給出一個整數商和一個介於一定範圍的餘數，使得下面等式成立：

一般所稱 “歐幾里得除法”，限定餘數的範圍為：

還有叫做 “居中除法”（centered division）的變體，限定餘數為，這種餘數稱為 “居中餘數”。這樣的限定都是為了使得滿足等式的有且僅有一個。這時候的稱為帶餘除法的商。

概述

最常見的帶餘除法是整數與整數的帶餘除法（被除數和除數都是整數），但實數與整數乃至實數與實數的帶餘除法也有應用。對一般的抽象代數系統，能夠進行帶餘除法的都是具有歐幾里得性質的系統。如果餘數為零，則稱整除。一般約定除數不能為。

帶餘除法可表示為：

表達為：“除以等於，餘”。

帶餘除法的計算有長久的歷史，有各種計算工具和計算方法。最常用的是長除法（豎式除法）。帶餘除法在數論中有不少用途，比如說輾轉相除法的基本步驟就是帶餘除法。術語 “歐幾里得除法” 是在二十世紀期間作為 “歐幾里得環的除法” 的簡稱而介入的。

例子

以下是整數帶餘除法的例子：依照公曆，一年中的四月份有 30 天。每星期有 7 天，從四月的第一天開始，可以數出有四個星期，此外還有 2 天。如果要數出 5 個星期，則還差了 5 天。帶餘除法表示，就是：

裡面的 30 是被除數，7 是除數，4 是帶餘除法得到的商，2 是帶餘除法得到的餘數。日常生活中說：“四月份有四個多星期”，是帶餘除法的結果。

另一個例子是分配問題。假設有 30 個蘋果要分給 7 個人，每人分的要一樣多，那麼可以使用帶餘除法：

這說明每人可以分到 4 個，還剩餘 2 個。如果每人分 5 個，則是不夠的。每人如果只分 3 個，則還剩餘 9 個，可以繼續分。帶餘除法說明了在人人分到的要一樣多的條件下，每人可以分到的最多蘋果數目。

2.1 不同的帶餘除法

最基本的帶餘除法是整數與整數的帶餘除法，這時商和餘數都是整數。實數與整數的帶餘除法，或實數與實數的帶餘除法，餘數是實數，但不一定是整數。比如說討論使用正弦函式構造的數列時，就需要使用除數為的帶餘除法，來討論每一項具體的取值。

基本定理

帶餘除法限定了餘數的範圍，使得商唯一存在。整數與整數的帶餘除法中，餘數的範圍通常是這樣的個元素的集合。被除數為實數的帶餘除法中，常常會使用介於 0 和除數之間（大於等於 0，嚴格小於）的半開閉區間作為餘數的範圍；另一種常見的範圍是大於等於，嚴格小於。帶餘除法的基本定理說明：整數與整數的帶餘除法中，只要餘數的範圍是個整數，並且任何兩個數之差都不是的倍數，那麼帶餘除法的商唯一存在；被除數為實數的除法中，只要餘數的範圍是一個如同長度為的半開半閉區間，那麼帶餘除法的商唯一存在。

最常見的帶餘除法中用到的是整數除以整數的一個版本：

對任何給定的整數和非零整數，都存在唯一的整數以及屬於集合的整數，使得

3.1 證明

定理的證明是將整數集合或實數軸分割成長度為

的區間段。證明由兩部分組成 - 首先證明和的存在性，其次證明和的唯一性。

整數除以整數的情況：

假設餘數的範圍是，其中任兩個數的差都不是的倍數。那麼可以將全體整數分割成以下集合的不交併集：

其中的指兩兩不相交的並集。這樣的劃分方式下，不會有兩個集合有交集。反設有兩個集合和有交集：

那麼

這說明有兩個元素的差是的倍數。矛盾。另一方面，任何一個整數都必然屬於某個。設有整數，那麼存在整數使得，也就是說存在裡的一個數，使得 同樣地，對裡的每一個數，也各自存在的一個數和一個整數，使得 由於有個屬於集合的整數，根據抽屜原理，必然有兩個整數相同。而由前所證，不可能有的情況，所以只能是存在某個使得，所以：

因此，任何一個整數都唯一地屬於某個。而對應的這個整數就是帶餘除法唯一確定的商。

被除數是實數的情況：

假設餘數的範圍是，那麼將實數軸分割為：

這個分割方式構成了實數的一個分劃，每個實數都唯一地屬於其中的某一個區間段，所以被除數也必然唯一地屬於其中的某一個區間段。假設屬於區間段：，則說明

所以帶餘除法的商唯一確定，就是。

計算

計算帶餘除法和計算除法的手段基本相同。手工計算時常常使用長除法，與除法不同之處是到個位即停止，剩餘的即是餘數。計算機運算中使用的帶餘除法一般耗費的時間比相同位數的乘法更久，所以程式設計時為了減少機器運算量，常常會盡力避免除法運算。一般的程式語言和數學、統計軟體中，帶餘除法運算子（指令）和取模運算子（指令）可能是分開的，也可能是合併的。如在進行帶餘除法時儘管預設返回的是商，但實際上餘數也儲存在運算結果中。除數是 2 的冪次的時候，可以使用右移的位移運算代替帶餘除法。這是因為計算機儲存資料使用的是二進位制，取一個長度為的二進位制數的前位，實際上就是它除以 2 的次冪後的商，而後位則是其餘數。

4.1 演算法

4.1.1 原始演算法

原始的帶餘除法演算法可以視為是重複使用減法的過程。設要計算除以，則在裡面不斷地扣除，直到不能繼續扣除（滿足餘數範圍）為止。以、都是正整數，餘數範圍為的除法為例，虛擬碼如下：

function Division (a, b)

q ← 0; r ← a;

while r >= b do

r ← r - b;

q ← q + 1;

end while

return q, r;

這樣的演算法複雜度是的級別。

4.1.2 使用二分法

更為最佳化的演算法是使用二進位制以及二分法的結合。演算法大致分為兩個部分：首先用不斷倍增的方式找出一個所屬的區間，然後用二分法不斷收窄區間，直到將限制在一個長度為的區間為止。舉例來說，要計算 237 除以 9，可以首先列出如下表格：

也就是從小到大逐個列出 2 的冪次與 9 的乘積，直到超過 237 為止。其中，24 × 9 = 144 是小於等於 237 的最大數，之後的 288 就比 237 更大了。接下來反過來利用 2 的冪次與 9 的乘積來計算 237 除以 9。過程如下：

設，；
237 介於 144 與 288 之間，而 144 和 288 的平均數是 216，比 237 小，令，；
216 和 288 的平均數是 252，比 237 大，令，；
216 和 252 的平均數是 234，比 237 小，令，；
234 和 252 的平均數是 243，比 237 大，令，；
最後得到的值為 26，這就是 237 除以 9 的商，237 減去 234 剩餘的 3 就是餘數。虛擬碼如下：

function QuickDivision (a, b)

counter ← 0; power ← 1; mid ← 0; appr ← 0;

// 找到 2 的冪次與除數 b 的乘積中比被除數 a 大的最小數對應的冪次

while power * b

以上的演算法的複雜度在級別，當較大時，遠遠比原始的演算法快捷。

推廣

5.1 多項式的帶餘除法

以域為係數的多項式構成的多項式整環中也可以定義帶餘除法。設有、兩個多項式，其中不是零多項式。則存在由和唯一確定的多項式和，使得：

並且多項式是零多項式或者它的次數嚴格小於的次數，稱為多項式帶餘除法的餘元。

5.2 歐幾里得整環

普通的整數或實數之間的帶餘除法可以良好定義。在更廣泛的代數結構中，能夠定義帶餘除法的代數結構被稱為歐幾里得整環。定義如下：

設有整環和從到自然數的對映，使得：

: 若而，則存在使得，而且要麼有，或者 。

則稱為歐幾里得整環。

歐幾里得整環中，使用一個額外的函式來比較兩個元素之間的 “大小” 關係，從而能夠定義帶餘除法。這個函式也稱為範數。歐幾里得整環必然是主理想整環因而也必然是唯一分解整環。