歐幾里得除法，也稱為帶餘除法，是數學中的一種基本算術計算方式。給定一個被除數 a 和一個除數 b，帶餘除法給出一個整數商 q 和一個介於一定範圍的餘數 r，使得下面等式成立： a bq r 一般所稱 歐幾里得除法，限定餘數的範圍為： 0 le r b 還有叫做 居中除法的變體，限定餘數為 frac b2 le r frac b2，這種餘數稱為 居中餘數。這樣的限定都是為了使得滿足等式的 q 有且僅有一個。這時候的 q 稱為帶餘除法的商。 概述 最常見的帶餘除法是整數與整數的帶餘除法（被除數 a 和除數 b 都是整數），但實數與整數乃至實數與實數的帶餘除法也有應用。對一般的抽象代數系統，能夠進行帶餘除法的都是具有歐幾里得性質的系統。如果餘數為零，則稱 b 整除 a。一般約定除數 b 不能為 0。 帶餘除法可表示為： a div b q dots r 表達為：a 除以 b 等於 q，餘 r。 帶餘除法的計算有長久的歷史，有各種計算工具和計算方法。最常用的是長除法（豎式除法）。帶餘除法在數論中有不少用途，比如說輾轉相除法的基本步驟就是帶餘除法。術語 歐幾里得除法 是在二十世紀期間作為 歐幾里得環的除法 的簡稱而介入的。 例子 以下是整數帶餘除法的例子：依照公曆，一年中的四月份有 30 天。每星期有 7 天，從四月的第一天開始，可以數出有四個星期，此外還有 2 天。如果要數出 5 個星期，則還差了 5 天。帶餘除法表示，就是： 30 div 7 4 dots 2 裡面的 30 是被除數，7 是除數，4 是帶餘除法得到的商，2 是帶餘除法得到的餘數。日常生活中說：四月份有四個多星期，是帶餘除法的結果。 另一個例子是分配問題。假設有 30 個蘋果要分給 7 個人，每人分的要一樣多，那麼可以使用帶餘除法： 30 div 7 4 dots 2 這說明每人可以分到 4 個，還剩餘 2 個。如果每人分 5 個，則是不夠的。每人如果只分 3 個，則還剩餘 9 個，可以繼續分。帶餘除法說明了在人人分到的要一樣多的條件下，每人可以分到的最多蘋果數目。 不同的帶餘除法 最基本的帶餘除法是整數與整數的帶餘除法，這時商和餘數都是整數。實數與整數的帶餘除法，或實數與實數的帶餘除法，餘數是實數，但不一定是整數。比如說討論使用正弦函式構造的數列 sin n mid n in mathbb Z 時，就需要使用除數為 2pi 的帶餘除法，來討論每一項具體的取值。 基本定理 帶餘除法限定了餘數的範圍，使得商唯一存在。整數與整數的帶餘除法中，餘數的範圍通常是 0 1 dots b 1 這樣的 b 個元素的集合。被除數為實數的帶餘除法中，常常會使用介於 0 和除數 left vert b right vert 之間（大於等於 0，嚴格小於 left vert b right vert）的半開閉區間作為餘數的範圍；另一種常見的範圍是大於等於 frac left vert b right vert2，嚴格小於 frac left vert b right vert2。帶餘除法的基本定理說明：整數與整數的帶餘除法中，只要餘數的範圍是 left vert b right vert 個整數，並且任何兩個數之差都不是的倍數，那麼帶餘除法的商唯一存在；被除數為實數的除法中，只要餘數的範圍是一個如同長度為 left vert b right vert 的半開半閉區間，那麼帶餘除法的商唯一存在。 最常見的帶餘除法中用到的是整數除以整數的一個版本： 對任何給定的整數 a 和非零整數 b，都存在唯一的整數 q 以及屬於集合 0 1 dots b 1 的整數 r，使得 a bq r 證明 定理的證明是將整數集合或實數軸分割成長度為 的區間段。證明由兩部分組成 首先證明 q 和 r 的存在性，其次證明 q 和 r 的唯一性。 整數除以整數的情況： 假設餘數的範圍是 R r_1 r_2 dots r_b，其中任兩個數的差都不是 b 的倍數。那麼可以將全體整數分割成以下集合的不交併集： mathbb Z sqcup_kinmathbb Zr_1 kb r_2 kb dots r_b kb sqcup_kinmathbb Z R_k 其中的 sqcup 指兩兩不相交的並集。這樣的劃分方式下，不會有兩個集合有交集。反設有兩個集合 R_k 和 R_l 有交集： r_i kb r_j lb 那麼 r_i r_j l k b 這說明有兩個元素的差是 b 的倍數。矛盾。另一方面，任何一個整數都必然屬於某個 R_k。設有整數 s，那麼存在整數 q_s 使得 q_s bleq sq_s bb，也就是說存在 0 1 dots b 1 裡的一個數 t_s，使得 s q_s b t_s 同樣地，對 r_1 r_2 dots r_b 裡的每一個數 r_i，也各自存在 0 1 dots b 1 的一個數 t_i 和一個整數 q_i，使得 r_i q_i b t_i 由於有 b1 個屬於集合 0 1 dots b 1 的整數，根據抽屜原理，必然有兩個整數相同。而由前所證，不可能有 t_i t_j 的情況，所以只能是存在某個 i 使得 t_i t_s，所以： s q_s b t_s q_s b t_i q_s b r_i q_i b s r_i q_s q_i b in R_q_s q_i 因此，任何一個整數都唯一地屬於某個 R_k。而對應的這個整數 k 就是帶餘除法唯一確定的商。 被除數是實數的情況： 假設餘數的範圍是 xxb，那麼將實數軸 mathbb R 分割為： mathbb R sqcup_kinmathbb Zxkb xk1 b 這個分割方式構成了實數的一個分劃，每個實數都唯一地屬於其中的某一個區間段，所以被除數 a 也必然唯一地屬於其中的某一個區間段。假設 a 屬於區間段：I_q xq_0b xq_01 b，則說明 x le a q_0 b x b 所以帶餘除法的商唯一確定，就是 q_0。 計算 計算帶餘除法和計算除法的手段基本相同。手工計算時常常使用長除法，與除法不同之處是到個位即停止，剩餘的即是餘數。計算機運算中使用的帶餘除法一般耗費的時間比相同位數的乘法更久，所以程式設計時為了減少機器運算量，常常會盡力避免除法運算。一般的程式語言和數學、統計軟體中，帶餘除法運算子（指令）和取模運算子（指令）可能是分開的，也可能是合併的。如在進行帶餘除法時儘管預設返回的是商，但實際上餘數也儲存在運算結果中。除數是 2 的冪次的時候，可以使用右移的位移運算代替帶餘除法。這是因為計算機儲存資料使用的是二進位制，取一個長度為 n 的二進位制數的前 k 位，實際上就是它除以 2 的 nk 次冪後的商，而後 nk 位則是其餘數。 演算法 原始演算法 原始的帶餘除法演算法可以視為是重複使用減法的過程。設要計算 a 除以 b，則在 a 裡面不斷地扣除 b，直到不能繼續扣除（滿足餘數範圍）為止。以 a、b 都是正整數，餘數範圍為 0 1 dots b 1 的除法為例，虛擬碼如下： function Division a b q 0 r a while r b do r r b q q 1 end while return q r 這樣的演算法複雜度是 frac ab 的級別。 使用二分法 更為最佳化的演算法是使用二進位制以及二分法的結合。演算法大致分為兩個部分：首先用不斷倍增的方式找出一個 a 所屬的區間，然後用二分法不斷收窄區間，直到將 a 限制在一個長度為 b 的區間為止。舉例來說，要計算 237 除以 9，可以首先列出如下表格： 0 1 2 3 4 5 1 2 4 8 16 32 9 18 36 72 144 288 也就是從小到大逐個列出 2 的冪次與 9 的乘積，直到超過 237 為止。其中，24 9 144 是小於等於 237 的最大數，之後的 288 就比 237 更大了。接下來反過來利用 2 的冪次與 9 的乘積來計算 237 除以 9。過程如下： 設 q16，p32； 237 介於 144 與 288 之間，而 144 和 288 的平均數是 216，比 237 小，令 q frac 16 322 24，p32； 216 和 288 的平均數是 252，比 237 大，令 q24，p frac 24 322 28； 216 和 252 的平均數是 234，比 237 小，令 q frac 24 282 26，p28； 234 和 252 的平均數是 243，比 237 大，令 q26，p frac 26 282 27； 最後得到 q 的值為 26，這就是 237 除以 9 的商，237 減去 234 剩餘的 3 就是餘數。虛擬碼如下： function QuickDivision a b counter 0 power 1 mid 0 appr 0 zhhans 找到 2 的冪次與除數 b 的乘積中比被除數 a 大的最小數對應的冪次；zhhant 找到 2 的冪次與除數 b 的乘積中比被除數 a 大的最小數對應的冪次 while power b a do counter counter 1 power power 2 end while p power q power 2 p 和 q 乘以 b 以後分別是 a 的上界和下界，以下用二分法不斷收窄上下界，直到上下界之差等於 b（即 p 與 q 之差等於 1）為止 for k from 1 to counter 1 do 計算上下界的平均值 comp p q 2 mid comp b 如果平均值小於等於 a，則調高下界，同時記錄平均值，否則調低上界 if mid a then appr mid q comp else p comp end if end for 結束後 q 乘以 b 的積就是小於等於 a 的 b 的倍數中最大的，這說明 q 就是商；appr 是最後一個小於等於 a 的平均值，所以它和 a 的差就是餘數 r a appr return q r 以上的演算法的複雜度在 log_2left frac abright 級別，當 frac ab 較大時，遠遠比原始的演算法快捷。 推廣 多項式的帶餘除法 以域 mathbb K 為係數的多項式構成的多項式整環 mathbb KX 中也可以定義帶餘除法。設有 A、B 兩個多項式，其中 B 不是零多項式。則存在由 A 和 B 唯一確定的多項式 Q 和 R，使得： A BQ R 並且多項式 R 是零多項式或者它的次數嚴格小於 B 的次數，稱為多項式帶餘除法的餘元。 歐幾里得整環 普通的整數或實數之間的帶餘除法可以良好定義。在更廣泛的代數結構中，能夠定義帶餘除法的代數結構被稱為歐幾里得整環。定義如下： 設有整環 D 和從 D 到自然數的對映 v D setminus 0_D to N cup 0，使得： 若 a b in D 而 b neq 0_D，則存在 q r in D 使得 a bqr，而且要麼有 r0_D，或者 v r v b。 則稱 D 為歐幾里得整環。 歐幾里得整環中，使用一個額外的函式來比較兩個元素之間的 大小 關係，從而能夠定義帶餘除法。這個函式也稱為範數。歐幾里得整環必然是主理想整環因而也必然是唯一分解整環。 參見 除法 同餘 參考來源 Category 數論 Category 算術 Category 除法