带余除法

欧几里得除法（），也称为带余除法（），是数学中的一种基本算术计算方式。给定一个被除数formula_1和一个除数formula_2，带余除法给出一个整数商formula_3和一个介于一定范围的余数formula_4，使得下面等式成立：
一般所称“欧几里得除法”，限定余数的范围为：
还有叫做“居中除法”（）的变体，限定余数为formula_7，这种余数称为“居中余数”。这样的限定都是为了使得满足等式的formula_3有且仅有一个。这时候的formula_3称为带余除法的商。
概述.
最常见的带余除法是整数与整数的带余除法（被除数formula_1和除数formula_2都是整数），但实数与整数乃至实数与实数的带余除法也有应用。对一般的抽象代数系统，能够进行带余除法的都是具有欧几里得性质的系统。如果余数为零，则称formula_12整除formula_13。一般约定除数formula_2不能为formula_15。
带余除法可表示为：
表达为：“formula_1除以formula_2等于formula_3，余formula_4”。
带余除法的计算有长久的历史，有各种计算工具和计算方法。最常用的是长除法（竖式除法）。带余除法在数论中有不少用途，比如说辗转相除法的基本步骤就是带余除法。术语“欧几里得除法”是在二十世纪期间作为“欧几里得环的除法”的简称而介入的。
例子.
以下是整数带余除法的例子：依照公历，一年中的四月份有30天。每星期有7天，从四月的第一天开始，可以数出有四个星期，此外还有2天。如果要数出5个星期，则还差了5天。带余除法表示，就是：
里面的30是被除数，7是除数，4是带余除法得到的商，2是带余除法得到的余数。日常生活中说：“四月份有四个多星期”，是带余除法的结果。
另一个例子是分配问题。假设有30个苹果要分给7个人，每人分的要一样多，那么可以使用带余除法：
这说明每人可以分到4个，还剩余2个。如果每人分5个，则是不够的。每人如果只分3个，则还剩余9个，可以继续分。带余除法说明了在人人分到的要一样多的条件下，每人可以分到的最多苹果数目。
不同的带余除法.
最基本的带余除法是整数与整数的带余除法，这时商和余数都是整数。实数与整数的带余除法，或实数与实数的带余除法，余数是实数，但不一定是整数。比如说讨论使用正弦函数构造的数列formula_23时，就需要使用除数为formula_24的带余除法，来讨论每一项具体的取值。
基本定理.
带余除法限定了余数的范围，使得商唯一存在。整数与整数的带余除法中，余数的范围通常是formula_25这样的formula_2个元素的集合。被除数为实数的带余除法中，常常会使用介于0和除数formula_27之间（大于等于0，严格小于formula_27）的半开闭区间作为余数的范围；另一种常见的范围是大于等于formula_29，严格小于formula_30。带余除法的基本定理说明：整数与整数的带余除法中，只要余数的范围是formula_27个整数，并且任何两个数之差都不是的倍数，那么带余除法的商唯一存在；被除数为实数的除法中，只要余数的范围是一个如同长度为formula_27的半开半闭区间，那么带余除法的商唯一存在。
最常见的带余除法中用到的是整数除以整数的一个版本：
对任何给定的整数formula_1和非零整数formula_2，都存在唯一的整数formula_3以及属于集合formula_25的整数formula_4，使得
证明.
定理的证明是将整数集合或实数轴分割成长度为||的区间段。证明由两部分组成 - 首先证明formula_3和formula_4的存在性，其次证明formula_3和formula_4的唯一性。
整数除以整数的情况：
假设余数的范围是formula_43，其中任两个数的差都不是formula_2的倍数。那么可以将全体整数分割成以下集合的不交并集：
其中的formula_46指两两不相交的并集。这样的划分方式下，不会有两个集合有交集。反设有两个集合formula_47和formula_48有交集：
那么
这说明有两个元素的差是formula_2的倍数。矛盾。另一方面，任何一个整数都必然属于某个formula_47。设有整数formula_53，那么存在整数formula_54使得formula_55，也就是说存在formula_25里的一个数formula_57，使得formula_58 同样地，对formula_59里的每一个数formula_60，也各自存在formula_25的一个数formula_62和一个整数formula_63，使得formula_64 由于有formula_65个属于集合formula_25的整数，根据抽屉原理，必然有两个整数相同。而由前所证，不可能有formula_67的情况，所以只能是存在某个formula_68使得formula_69，所以：
因此，任何一个整数都唯一地属于某个formula_47。而对应的这个整数formula_73就是带余除法唯一确定的商。
被除数是实数的情况：
假设余数的范围是formula_74，那么将实数轴formula_75分割为：
这个分割方式构成了实数的一个分划，每个实数都唯一地属于其中的某一个区间段，所以被除数formula_1也必然唯一地属于其中的某一个区间段。假设formula_1属于区间段：formula_79，则说明
所以带余除法的商唯一确定，就是formula_81。
计算.
计算带余除法和计算除法的手段基本相同。手工计算时常常使用长除法，与除法不同之处是到个位即停止，剩余的即是余数。计算机运算中使用的带余除法一般耗费的时间比相同位数的乘法更久，所以编程时为了减少机器运算量，常常会尽力避免除法运算。一般的编程语言和数学、统计软件中，带余除法运算符（指令）和取模运算符（指令）可能是分开的，也可能是合并的。如在进行带余除法时尽管默认返回的是商，但实际上余数也储存在运算结果中。除数是2的幂次的时候，可以使用右移的位移运算代替带余除法。这是因为计算机储存数据使用的是二进制，取一个长度为formula_82的二进制数的前formula_73位，实际上就是它除以2的formula_84次幂后的商，而后formula_84位则是其余数。
算法.
原始算法.
原始的带余除法算法可以视为是重复使用减法的过程。设要计算formula_1除以formula_2，则在formula_1里面不断地扣除formula_2，直到不能继续扣除（满足余数范围）为止。以formula_1、formula_2都是正整数，余数范围为formula_92的除法为例，伪代码如下：
function Division(a, b)
 q ← 0; r ← a; 
 while r &gt;= b do
 r ← r - b;
 q ← q + 1;
 end while
 return q, r;
这样的算法复杂度是formula_93的级别。
使用二分法.
更为优化的算法是使用二进制以及二分法的结合。算法大致分为两个部分：首先用不断倍增的方式找出一个formula_1所属的区间，然后用二分法不断收窄区间，直到将formula_1限制在一个长度为formula_2的区间为止。举例来说，要计算237除以9，可以首先列出如下表格：
也就是从小到大逐个列出2的幂次与9的乘积，直到超过237为止。其中，24 × 9 = 144 是小于等于237的最大数，之后的288就比237更大了。接下来反过来利用2的幂次与9的乘积来计算237除以9。过程如下：
function QuickDivision(a, b)
 counter ← 0; power ← 1; mid ← 0; appr ← 0;
 //-{zh-hans:找到2的幂次与除数b的乘积中比被除数a大的最小数对应的幂次;zh-hant:找到2的幂次与除数b的乘积中比被除数a大的最小数对应的幂次}-
 while power * b &lt;= 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 &lt;= 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;
以上的算法的复杂度在formula_108级别，当formula_93较大时，远远比原始的算法快捷。
推广.
多项式的带余除法.
以域formula_110为系数的多项式构成的多项式整环formula_111中也可以定义带余除法。设有formula_112、formula_113两个多项式，其中formula_113不是零多项式。则存在由formula_112和formula_113唯一确定的多项式formula_117和formula_118，使得：
并且多项式formula_118是零多项式或者它的次数严格小于formula_113的次数，称为多项式带余除法的余元。
欧几里得整环.
普通的整数或实数之间的带余除法可以良好定义。在更广泛的代数结构中，能够定义带余除法的代数结构被称为欧几里得整环。定义如下：
欧几里得整环中，使用一个额外的函数来比较两个元素之间的“大小”关系，从而能够定义带余除法。这个函数也称为范数。欧几里得整环必然是主理想整环因而也必然是唯一分解整环。