除法

除法（英语、法语：division）是四则运算之一。除法运算的本质，就是“重复减法的简化表达”。

例如：6÷3，就好像。

$\begin{cases} 6-3 = 3 \\ 3-3 = 0 \end{cases}$，$6$被$3$减了两次后，就变成了$0$。

如果

$$a \times b = c$$

而且$b$不等于零，那么

$$a = c \div b$$

其中，a称为商数，b称为除数，c称为被除数。

如果除式的商数（$a$）必须是整数，则称为带余除法，$a \times b$与$c$相差的数值，称为余数（$d$）。

$$c \div b = a \dots d$$

这也意味着

$$c = a \times b + d$$

在高等数学、科学、工程学和计算机编程语言中，$c \div b$写成$c/b$。如果我们毋需知晓确切值，或者留待以后引用，这种形式也常称之为分数的最终形式。其中寻找商数的函数为$\operatorname{div}$，寻找余数（即模除）的函数则为$\operatorname{mod}$。

在代数结构范畴中，除法运算存在两种基本形式，对应不同的数学结构定义：

- 带余除法（欧几里得除法）：若代数结构中定义了带余除法（即存在商和余数，且余数的范数严格小于除数的范数），则该结构称为欧几里得整环。例如，一元多项式环（系数取自域）在其多项式次数构成的范数下构成欧几里得整环。
- 无余除法：若代数结构中所有非零元素均可逆（即对任意非零元素 $a$，存在 $b$ 使得 $ab=ba=1$），则该结构称为域；若仅满足乘法可逆性（不要求交换性），则称为除环。例如，复数是域，而四元数是除环。

## 引言

首先，进入正题前，我们不妨来看两个生活中的例子：

- 将500克糖果均分给8人：由$\dfrac{500}{8} = 62{{.}}5$可得，每人获得62.5克糖果（无余除法）
- 500克奶粉，按70克/份分配：由$\dfrac{500}{70} = 7{{.}}14\ldots$可得，可完整分配7份，余量≈0.14份（带余除法）

其次，数学和物理存在许多“比例关系反演”：

- 已知某物体重力 $P=m\times g$，可得质量 $m=P/g$。
- 已知匀速直线运动状态下，某物体行进距离 $d=v\times t$，可得时间 $t=d/v$。
- 对一般仿射关系 $y=ax+b$，其逆映射为 $x=(y-b)/a$。
- 当函数局部可线性化时（如泰勒展开一阶近似）：$y=f(x)\approx f(x_0)+f'(x_0)\times(x-x_0)$。

可构造逆函数近似解：$x \simeq x_0 + \frac{f(x) - f(x_0)}{f'(x_0)}$；$f^{-1}(y) \simeq x_0 + \frac{y - f(x_0)}{f'(x_0)}$。

此乃牛顿迭代法求根的理论基础：$f^{-1}(0) \simeq x_0 - \frac{f(x_0)}{f'(x_0)}$。

可见，在数学，尤其是在基本算术中，除法可视为“乘法的反运算”，也可理解为“重复的减法”。

## 定义

### 基本定义

首先，我们来定义整数间的带余除法。这一运算的核心，是将被除数表示为“除数的整数倍+余数”的形式，且余数需满足特定条件。

具体而言，对于任意整数 $a$ 和非零整数 $b$，存在唯一的整数 $q$（商）和 $r$（余数），使得：

$a=b\times q+r$ 且 $0\leq r<|b|$

其中，余数 $r$ 的非负性及小于除数绝对值的性质确保了分解的唯一性。

该定义是数论中整除、同余等概念的基础，并广泛用于模运算、辗转相除法等算法中。

带余除法的概念，已能凸显除零问题的本质：如何将一个量分成0份？显然，这没有实际意义。

随后，我们引入十进制数的概念，并通过递归处理余数的方式扩展计算过程，由此便有了有理数的定义体系。至于实数，则在有理数基础上拓展而成。

此时可以设想，将整体划分为更小的单位份额，从而实现分数除法：将一个量除以 $0.1$（即$1/10$），意味着初始量相当于$1/10$个单位份额，进而求出完整单位的大小；而将一个量除以负数，则相当于计算需要移除的单位份额规模。

无理数无法直观理解为具体数量，但可视为一种比——例如正方形对角线与边长之比，或圆周长与其直径之比。至此，除法运算不再能单纯定义为“划分”，而应理解为乘法逆运算。

基于此定义，除以零仍无意义。由于零乘任何数都得零（$0\times a =0$），零便有无穷多个乘法逆元。我们亦可从极限角度理解该问题——因为除以某数等价于乘以其倒数，故可将原问题转化为函数$f(x)=1/x$在零点处极限的操作：当 $x$ 从左侧趋近于零时，极限为$-\infty$，从右侧趋近时，则为$+\infty$。

即便通过引入广义实数集（即在实数轴上添加$-\infty$和$+\infty$这两个“伪无穷大”）来扩展数系，问题仍未解决，因为极限值的符号不确定性依然存在。由此可见，除法在代数与数分中具有根本性意义。

### 其它定义

#### 环论中的除法定义

设 $(A,+,\times)$ 为整环，则 $A$ 上的除法运算定义为满足以下条件的二元关系：

- 运算规则：对于任意 $a,\,b,\,c\in A$，$a \div b = c$，当且仅当 $b \times c = a$（其中 $b \neq 0$）。
- 唯一性：整环的乘法消去律保证除法结果唯一（若 $b \times c_1 = a$ 且 $b \times c_2 = a$，则 $c_1 = c_2$）。
- 定义域限制：除法仅在 $\mathrm{A} \times (\mathrm{A}-\{0\})$ 上有定义，即除数不能为零。

#### 从整环到域的扩展

若 A 为交换环，可通过等价关系扩展除法：

- 定义等价关系$\sim$：$(a,b)\sim(a',b')\iff a\times b' = a'\times b$，其等价类称为分数，记为 $a/b$。
- 扩展后的集合$A / \sim$构成域（含乘法逆元），其中 $0 / 1$ 为加法单位元，$1 / 1$ 为乘法单位元。此即有理数域 $\mathbb{Q}$ 的构造基础。

#### 关键限制与意义

- 除零禁止：零元无乘法逆元，故 $b = 0$ 时除法无定义。
- 环论中的除法是乘法的逆运算，强调代数结构。
- 欧几里得除法侧重整数间的带余除法（如上文的带余除法），两者本质不同。

## 符号与表示

基础算术中，除号“÷”仍被广泛使用，而在代数与科学领域，除法通常用水平横线（也被称为分数分划线）或斜杠表示被除数与除数的关系。除这三种以外，还有其它不同形式。

### 除号形式

用除号将被除数和除数相隔开：

$$a \div b$$

但实际上，除了在基础算术外，这种形式并不常见。ISO 80000-2-10.6标准明确禁止使用该符号，因部分欧洲国家用 ÷ 表示减法，容易产生混淆。

### 分数分划线形式

将被除数置于分数线上方，除数置于下方，例如：

$$\frac ab$$

该形式可读作“a除以b”、“b除a”或“a比b”。

### 斜杠与反斜杠形式

在单行文本中，使用斜杠分隔被除数与除数，例如：

$$a/b$$

此写法常见于编程语言和计算器输入中。

另外，有部分数学软件（如MATLAB、GNU Octave）采用反斜杠表示运算顺序反转的除法：

$b\backslash a$ (等价于$a/b$）

还有以上下标斜杠显示的：

$${}^{a}\!/{}_{b}$$

### 冒号形式

在某些非英语国家，有的用冒号将被除数和除数相隔开：

$$a : b$$

此用法由奥特雷德于1631年最先引入，自莱布尼兹于1684年提倡以来，才为人广泛应用。莱布尼兹更喜欢用同一个符号表示除法和比率。而在英语用法中，“:”一般只表示比率。

在大部分非英语语言中，$c:b$代表$c \div b$的比，读做c比b；$c/b$则代表$c \div b$的比值。用法请参照比例。

除了以上这四种形式，美国自19世纪起便开始使用 $b)a$ 或 $b \overline{)a}$ 来单独表示 $a$ 除以 $b$，尤常见于长除法中。时至今日，美国仍有零星人口使用这种写法。

## 性质

严格而言，除法并不构成集合上的内部合成法则（一种二元运算），其所谓“性质”并不构成数集的结构特性，而应理解为分数形式的固有属性。

### 非运算性质

- 非交换律：$5 \div 3 \neq 3 \div 5$
- 非结合律：$12 \div (4 \div 3) \neq (12 \div 4) \div 3$

### 特殊元素与等式关系

- 右单位元：对任意数 $a$，存在 $\dfrac a1 = a$。
- 左零吸收元：当 $b \neq 0$ 时，$\dfrac 0b = 0$。
- 同分母时：当 $b \neq 0$ 时，$\dfrac ab = \dfrac cb \iff a=c$。
- 通分等价：当 $b \neq 0 \wedge d \neq 0$ 时，$\dfrac ab = \dfrac cd \iff ad=bc$。
- 顺序保持性：当 $b > 0$ 时，分数 $\dfrac ab$ 与 $\dfrac cb$ 的大小关系与原数 $a$ 和 $c$ 保持一致。

## 不同的除法运算

零除以任何非零的数都为零。即在被除数为零，除数非零的前提下，商数为零。

### 整数除法

整数集在除法运算下没有封闭性，这意味着，两个整数相除，结果不一定是整数。除零操作本身即无定义外，当被除数不是除数的整数倍时，商将呈现为非整数形式。

以26除以11为例，其商即便非整数，但也属于有理数范畴。此时通常采用以下5种处理策略：

- 将此类除法视为偏函数，即当除法无法得到整数结果时直接判定为无定义。这种处理方式严格遵循数学定义，但会限制运算的应用范围。
- 采用浮点近似法，将结果表示为带有小数部分的实数。这是数值计算方面的通用做法，例如 $26 \div 11 = 2.3636...$ 该方法通过牺牲精确性来换取运算的普适性，但可能引入舍入误差。
- 通过分数形式保持精确性，将结果表示为既约分数$\tfrac{26}{11}$或带分数$2 \tfrac 4{11}$。这种处理要求分子分母的最大公约数为1，例如$\tfrac{52}{22}$经约简后同样得到$\tfrac{26}{11}$。分数体系通过引入有理数集 $\mathbb{Q}$，使整数除法在更广泛的数系中保持封闭性。
- 采用欧几里得除法，将结果分解为商和余数的组合形式：$\tfrac{26}{11} = 2 \mbox{ remainder } 4.$ 这种表达式满足$0\leq 4<11$，其数学基础可追溯至《几何原本》中关于线段分割的公理体系。该处理方式在密码学和算法设计中具有重要应用，如RSA加密算法中的模幂运算。
- 实施整数截断，直接取商的地板值（floor function），即$\tfrac{26}{11} = 2$。该处理方式在编程语言中普遍使用，如C语言的整数除法运算符“/”默认采用此规则。但需要注意的是：
- 不同语言对负数处理存在差异。例如，C语言采用向零取整（T-division），而Python采用向下取整（F-division）。
- 不同语言对整数除法的实现存在显著差异。例如，MATLAB和计算机代数系统通常返回精确分数，而Java、C++等语言则返回截断后的整数。为获取完整结果，多数语言提供辅助函数，如Python的divmod可同时获取商和余数，Java的Math.floorDiv可实现地板值除法。
- 术语方面，“div”、“/”、“\”等符号在不同语境下可能代表不同运算规则。例如，C++中的“/”运算符对整数执行截断除法，而对浮点数执行精确除法；Python的“//”运算符则严格实施地板值除法。这种语义差异要求程式员必须明确上下文环境。

欲快速判定整数可除性（整除性），可借助整除规则：如2的倍数末位为偶数，3的倍数各位数字之和可被3整除等。这些规则本质上是数论中同余理论的特例。

### 有理数除法

在除数非零的前提下，两个有理数相除，结果仍为有理数。

具体而言，对于有理数$\frac pq$和$\frac rs$（其中 $p, q, r, s$均为整数且 $q, s\neq 0$），其除法运算可表示为：

$${p/q \over r/s} = {p \over q} \times {s \over r} = {ps \over qr}$$

该公式表明，有理数的除法本质上是乘以除数的倒数。所有参与运算的量均为整数，且仅有分子 $p$ 允许为零（此时结果为有理数0）。

这一定义严格保证了除法与乘法的逆运算关系：若 $\frac ab \div \frac cd = \frac ef$，则必然满足 $\frac ef \times \frac cd = \frac ab$。

### 实数除法

由有理数除法可得，在除数非零的前提下，两实数相除，结果仍为实数。

### 复数除法

#### 代数形式的复数除法

对于两个非零复数 $p+iq$ 和 $r+is$（其中 $p,\,q,\,r,\,s\in \mathbb{R}$，且 $r$ 和 $s$ 不同时为零），其除法运算通过分母实数化实现。先将分子和分母同时乘以分母的共轭复数 $r-is$，分子展开后再分离实部与虚部，即

$${p+iq \over r+is} = {(p+iq)(r-is) \over (r+is)(r-is)} = {pr+qs + i(qr-ps) \over r^2+s^2} = {pr+qs \over r^2+s^2} + i{qr-ps \over r^2+s^2}$$

该方法通过消去分母的虚部实现有理化，分母变为实数。

#### 极坐标形式的复数除法

当上文复数表示为极坐标形式 $pe^{iq}$ 和 $re^{is}$ （与上述条件相同外， $p, r>0$）时，运算可进一步简化为：

$${p e^{iq} \over r e^{is}} = {p e^{iq} e^{-is} \over r e^{is} e^{-is}} = {p \over r}e^{i(q - s)}$$

该方法直接利用欧拉公式的性质，避免了复杂的代数运算。

### 多项式除法

和整数之间的带余除法类似，一元多项式之间也可以进行带余除法。

证明：

设有多项式$A$和非零多项式$B$，则存在唯一的多项式$Q$和$R$，满足：

$$A = BQ + R$$

而多项式$R$若非零多项式，则其幂次严格小于$B$的幂次。

作为特例，如果要计算某个多项式$P$除以一次多项式$X-a$得到的余多项式，可以直接将$a$代入到多项式$P$中。$P$除以$X-a$的余多项式是$P(a)$。

具体的计算可以使用类似直式除法的方式。例如，计算$X^3 - 12X^2 - 42$除以$X-3$，列式如下：

$$\begin{matrix} \qquad\quad\;\, X^2 \; - 9X \quad - 27\\ \qquad\quad X-3\overline{\vert X^3 - 12X^2 + 0X - 42}\\ \;\; \underline{\;\;X^3 - \;\;3X^2}\\ \qquad\qquad\quad\; -9X^2 + 0X\\ \qquad\qquad\quad\; \underline{-9X^2 + 27X}\\ \qquad\qquad\qquad\qquad\qquad -27X - 42\\ \qquad\qquad\qquad\qquad\qquad \underline{-27X + 81}\\ \qquad\qquad\qquad\qquad\qquad\qquad\;\; -123 \end{matrix}$$

因此，商式是$\ X^2 - 9X - 27$，余式是$\ -123$。

### 矩阵除法

矩阵除法可通过逆矩阵运算实现，通常定义为右除：对于可逆方阵 $A$ 和 $B$，其除法运算表示为：

$$A / B = A \cdot B^{-1}$$

其中 $B^{-1}$ 为 $B$ 的逆矩阵。为避免歧义，该运算更常见于显式写出乘积形式 $AB^{-1}$。

此外，矩阵的元素级除法可通过阿达玛积定义，即对应元素相除：

${A \over B} = A \circ B$ （要求 $B$ 元素非零）

### 抽象代数除法

抽象代数中，给定一个带有二元运算 * 的广群，左除（记为 a \ b）通常定义为满足方程 1=a ∗ x = b 的解 $x$，类似地，右除记为 b / a）通常定义为满足方程 1=y ∗ a = b 的解 $y$。这种除法定义不要求运算 * 具有交换性、结合性或单位元等性质。若一个广群中，所有元素对 $a$ 和 $b$ 的左除和右除均存在且唯一（即满足拉丁方阵），则该广群称为拟群。在拟群中，即使没有单位元和逆元，这种除法运算始终可行。

#### 消去性质与除法运算的扩展

在任意广群中，若元素 $a$ 满足消去律，则可通过 $a$ 对元素进行消去操作。例如：

- 矩阵代数中，可逆矩阵的左乘或右乘满足消去律。
- 四元数代数中，非零元素满足消去律。
- 拟群的结构天然支持消去操作。

在整环中，虽然并非所有元素都有逆元，但对可消去元素 $a$，仍可对形如 $ab$ 或 $ca$ 的元素进行左除（1=a \ (ab) = b）或右除（1=(ca) / a = c）。进一步地，若一个有限环的所有非零元素均满足消去性质，则根据鸽巢原理，每个非零元素必为可逆元，从而该环成为除环，此时任意非零元素均可作除法。

#### 除法代数的分类与博特周期性

博特周期性定理表明，对于满足特定条件的代数结构（如有限维实范数除法代数），其仅能与以下四类结构同构：

- 实数域 $\mathbb{R}$（维度 1）。
- 复数域 $\mathbb{C}$（维度 2）。
- 四元数代数 $\mathbb{H}$（维度 4）。
- 八元数代数 $\mathbb{O}$（维度 8）。

这一分类结果揭示了除法代数维度的内在规律性，并在拓扑学与量子场论中具有重要应用。

### 二进制除法

讲完以上十进制除法，我们来介绍计算机科学领域更为常见的二进制编码数除法。

#### 二元欧几里得除法

首先，我们来思考两个正整数 $a$ 和 $b$ 的除法运算，采用欧几里得除法。

设 $a$ 和 $b$ 均为 $n$ 位二进制数，其中 $a(i)$ 表示第 $i$ 位（从右向左，编号为 $0$ 至 $n-1$），$a(i:j)$ 表示从第 $i$ 位到第 $j$ 位的连续位段。以下伪代码（因词汇采用法语而非英语，如无另外说明，以下伪代码词汇皆用法语）实现了该除法的商 $Q$ 和余数 $R$ 的计算：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;
    
    Q := 0 ; R := a ; // initialisation
    pour i = n-1 → 0
        si a(n:i) >= b alors
            Q(i) = 1 ; // i-ème bit du quotient
            R = a(n:i) - b ; // reste
        fin
     fin
     retourne [Q, R] ;
fin
```

算法从被除数的最高位开始，逐步截取与除数同长度的位段（记为 $a(n:i)$），并判断是否满足 $a(n:i)\geq b$。若当前截取的被除数高位段（从最高位开始逐步扩展）小于除数，则商的对应位为0；若该位段数值大于等于除数b，则通过一次减法操作确定商的当前位为1，并更新余数 $R = a(n:i) -b$。

原始伪代码通过逐位比较实现，而优化版本有以下改进：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    Q := 0 ; R := 0 ; // initialisation
    pour i = n-1 → 0
        R = décalage_à_gauche_de_bits(R, 1) ; // équivaut à rajouter un 0 à droite
        R(1) = a(i) ; // le bit de poids faible de R est le i-ème bit du numérateur
        si R >= b alors
            Q(i) = 1 ; // i-ème bit du quotient
            R = R - b ; // reste
        fin
    fin
    retourne [Q, R] ;
fin
```

而对于浮点数，只需将其分解为尾数和指数，公式为：

$$\frac{2^m\,a}{2^n\,b}=2^{m-n}\frac ab$$

但需处理舍入误差，如采用舍入到最近偶数策略。

总之，该算法仅需比较、位移、减法三种基本操作，体现了计算机算术运算中位级优化的核心思想，适合在微处理器中通过组合逻辑电路或状态机实际操作。

#### 相对较慢的算法

设被除数 $a$ 和除数 $b$ 均为 $n$ 位二进制数，其中 $a(i)$ 表示第 $i$ 位（从右向左，编号为 $0$ 至 $n-1$），$a(i:j)$ 表示从第 $i$ 位到第 $j$ 位的连续位段。算法核心思想是通过递推关系构造商 $Q$ 和余数 $R$。

在第 $i$ 步迭代中，余数更新公式为：

$$R_i=B\times R_{i-1}-Q_{n-i}\times b$$

若当前余数 $R_{i-1}$ 左移后大于等于除数 $b$，则商位 $Q_{n-i}=1$，更新余数

$$R_i=2\times R_{i-1}-b$$

若结果为负，则商位 $Q_{n-i}=0$，需恢复余数

$R_i=2\times R_{i-1}+b$（通过加回除数实现）

此算法下，原始版本伪代码如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R := a // valeur initiale du reste
    b := décalage_à_gauche_de_bits(b, n)
    pour i = n-1 → 0
        R := décalage_à_gauche_de_bits(b, 1)
        si R >= b alors
             Q(i) := 1 // le i-ème bit de i est 1
             R = R - b
        sinon
             Q(i) := 0 // le i-ème bit de i est 0
        fin
    fin
    retourner[Q, R]
fin
```

优化版本伪代码如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R := a // valeur initiale du reste
    b := décalage_à_gauche_de_bits(b, n)
    pour i = n-1 → 0
        R := 2*R - b // le reste décalé est-il supérieur à b ?
        si R >= 0 alors
            Q(i) := 1 // le i-ème bit de i est 1
        sinon
            Q(i) := 0 // le i-ème bit de i est 0
            R := R + b // on restaure la valeur du reste en gardant le décalage
        fin
    fin
    retourner[Q, R]
fin
```

由于循环中的最后一条语句，这种算法被称为“带恢复的除法”。通过引入+1和-1商位生成机制，可改进为无恢复余数算法。

例如，二进制数`11101010`可通过以下方式计算：

11101010 -00010101 ---------11010101，通过商位符号扩展避免余数恢复步骤。

无恢复余数算法伪代码如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R[0] := a
    i := 0
    tant que i < n
        si R[i] >= 0 alors
            Q[n-(i+1)] := 1
            R[i+1] := 2*R[i] - b
        sinon
            Q[n-(i+1)] := -1
            R[i+1] := 2*R[i] + b
        fin
        i := i + 1
    fin
    Q = transforme(Q)
    retourner[Q, R]
fin
```

另外，还有SRT算法，一种通过商位查找表的非恢复方法。

#### 相对更快的算法

快速除法的核心思想，是通过计算倒数实现除法运算，即先计算 $x=1/b$，再通过乘法 $Q=a\times x$ 得到商。此乃牛顿-拉夫森法，其数学形式为：

$$x_i = x_{i - 1} - \frac{f_b(x_{i - 1})}{f'_b(x_{i - 1})}$$

其中，函数 $f_b(x) = 0$ 的零点即为 $1/b$。迭代公式可简化为：

$$x_i = x_{i-1} + x_{i-1} (1-b x_{i-1})$$

为加速收敛，需对 $1/b$ 进行初始估计。先将除数 $b$ 的二进制指数对齐至区间 $[0,5;1]$，再采用预计算的线性近似公式：

$$x_0 = \frac{48}{17} - \frac{32}{17}b\ (\simeq 2{{,}}82 - 1,88 b)$$

其中系数 $48/17$ 和 $32/17$ 已预先存储为常量。

牛顿-拉夫森法具有二次收敛性，误差随迭代次数指数级下降。对于 $p$ 位精度，所需迭代次数为：

$$s = \log_2 \left ( \frac{p + 1}{\log_2 17} \right )$$

欲求单精度浮点数（24位尾数），需要约3次迭代；欲求双精度浮点数（53位尾数），则需约4次迭代。

牛顿-拉夫森法伪代码如下：

```text
fonction [Q] = diviser(a, b)
    e := exposant(b) // b = M*2^e (représentation en virgule flottante)
    b' := b/2^{e + 1} // normalisation ; peut se faire par un décalage de e+1 bits à droite
    a' := a/2^{e + 1} // 0.5 <= b <= 1 ; a'/b' = a/b
    X := 48/17 - 32/17*b' // initialisation de la méthode de Newton
    pour i = 1 → s // s précalculé en fonction du nombre p de bits de la mantisse
        X := X + X*(1 - b*X)
    fin
    Q := a'*X
    retourne[Q]
fin
```

至于高施密特法，则是基于倒数逼近原理实现除法运算。其核心思想是通过构造因子序列

$$F_k=f_k\times f_{k-1}\times \ldots f_1 =\prod(f_i)$$

使得归一化后的除数b满足收敛条件

$b_k=F_k \times b \Longrightarrow 1$。

## 整除

<image>

整除是数学中两个自然数之间的一种关系。自然数$a$可以被自然数$b$整除，是指$b$是$a$的因数，且a是b的整数倍数，也就是$a$除以$b$没有余数。

$$a \div b = q \dots 0$$

因数判别法可参照整除规则。

### 表示方法

$b \mid a$表示$b$整除$a$，即$a$是$b$的倍数，$b$是$a$的因数。

### 举例

$15$可以被$5$整除，记作$5 \mid 15$。

$20$不能被$6$整除（因为余数为$2$），记作$6 \nmid 20$。在$\mid$上加一条斜线即表示不整除。

## 运算方法

根据乘法表，两个整数可以用长除法（直式除法）笔算。如果被除数有分数部分（或者说时小数点），计算时将小数点带下来就可以；如果除数有小数点，将除数与被除数的小数点同时移位，直到除数没有小数点。

算盘也可以做除法运算。

### 长除法

长除法俗称“长除”，适用于正式除法、小数除法、多项式除法（即因式分解）等较重视计算过程和商数的除法，过程中兼用了乘法和减法。

使用长除法计算的过程可以表示为：

<image>

$$\begin{array}{l} 37 \ \big) \\ \\ \\ \\ \\ \\ \\ \\ \end{array} \! \! \! \! \! \begin{array}{r} 34061 \\ \hline \ 1260257 \\ 111 \quad \quad \\ \hline 150 \quad \ \ \\ 148 \quad \ \ \\ \hline 225 \ \ \\ 222 \ \ \\ \hline 37 \\ 37 \\ \hline 0 \\ \end{array}$$

### 短除法

短除法是长除法的简化版本。在短除法里，被除数放中央，旁以一L型符号表示除法，被除数左侧为除数，下侧为商，省去了长除法逐层计算的过程。

$$\begin{array}{r} 7 \ | \! \underline{\, \ 3.00000000000000000 \dots \ } \\ 0.42857142857142857 \dots \ \end{array}$$

$$\begin{array}{r} 2 \ | \! \underline{\, \ \ \ 420 \ } \\ 2 \ | \! \underline{\, \ \ 210 \ } \\ 3 \ | \! \underline{\, \ 105 \ } \\ 5 \ | \! \underline{\, \ 35 \ } \\ 7 \ \end{array}$$

$$420 = 2^2 \times 3 \times 5 \times 7$$

- 使用短除法计算$420,270$的最大公因数及最小公倍数：

$$\begin{array}{r} 2 \ | \! \underline{\, \ \ \ 420 \quad 270 \ } \\ 3 \ | \! \underline{\, \ \ 210 \quad 135 \ } \\ 5 \ | \! \underline{\, \ 70 \quad \ \ 45 \ } \\ 14 \quad \ \ \ \ 9 \ \end{array}$$

$$\begin{cases} \gcd(420, 270) = 2 \times 3 \times 5 = 30 \\ \operatorname{lcm}(420, 270) = 2 \times 3 \times 5 \times 14 \times 9 = 3780 \end{cases}$$

### 尺规作图法

类似于乘法、幂运算和平方根，除法同样可以用尺规作图来表示。下文将展示两种不同的操作方法：

一种方法是作圆法。

两幅附图分别展示了一种简洁解法，该解法同时适用于 $a:b$ 及其倒数 $b:a$。图中的虚线圆和弧并非解题所需，而凭通过弦定理，更清晰地展示证明过程。为方便对比，图中各点的命名与弦定理引言图一致。

以下仅针对$a<b$ 的情况（图1）说明构造步骤（至于 $a>b$ 的情况，见图2）：

<image>

<image>

- 在数轴上，将长度 $a$ 和 $b$ 的两条共线线段分别标记为线段 $\overline{DS}$ 和 $\overline{SB}$。
- 过点 $S$ 作 $\overline{DB}$ 的垂线，并作一条与 $\overline{DB}$ 距离为1的平行线，两线交于点 $C$。为确定过点 $C$ 的弧 $k_b$ 的圆心 $M$，需作弦 $\overline{DC}$ 和 $\overline{CB}$ 的两条中垂线（图中未画出）。
- 绘制弧 $\mathrm{arc}\; MBD$，其与另一辅助线交于点 $E$。
- 连接点 $D$ 和 $E$，该连线与过 $C$ 作的垂线交于 $C'$。
- 从点 $B$ 出发，作过 $E$ 的射线，直至其与过 $C$ 作的垂线交于 $C''$。

至此，构造基本完成。为避免出现重叠， $\overline{FD}$ 与 $\overline{C''S}$ 的长度关系需单独说明。

对图1的证明：

在以 $M'$ 为圆心的圆 $k_2$ 中应用弦定理可得：

$$\overline{A'S} \cdot \overline{C'S} = \overline{BS} \cdot \overline{DS} \Rightarrow$$

$$a:b = \overline{C'S} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{A'S}}.$$

在以 $M''$ 为圆心的圆 $k_3$ 中应用弦定理可得：

$$\overline{A''S} \cdot \overline{C''S} = \overline{BS} \cdot \overline{DS} \Rightarrow$$

$$b:a = \overline{C''S} = \overline{FD} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{A''S}}.$$

另一种方法是利用截线定理，用尺规作全等三角形。（图3）具体步骤如下：

<image>

- 自点 $A$ 引出第一条射线。
- 在该射线上，以 $A$ 为起点，先截取长度为 $1$ 的线段 $\overline{AE}$，再截取长度为 $b$ 的线段 $\overline{AB}$。
- 自点 $B$ 出发，在与 $\overline{AB}$ 成任意角 $\alpha$ 的方向上截取长度为 $a$ 的线段 $\overline{BD}$。
- 过点 $D$ 作自点 $A$ 引出的第二条射线。
- 自点 $E$ 作与 $\overline{BD}$ 平行的直线，该直线与第二条射线的交点 $C$ 所对应的线段 $\overline{EC}$ 即为所求商 $\frac{a}{b}$ 的长度。

## 关于“除以零”

### “除以零”有意义吗？

在标准数学体系中，除以零被定义为“未定义”操作，因其与“零乘任何有限数恒为零”相悖，计算器输入此类表达式也会报错。但在零环和轮代数等高阶数学结构中，通过重新定义运算规则，除以零可被赋予特定意义。

### 1 : 0 是否等于∞?

<image>

部分人认为，这个问题应当赋予“∞”的解，因为经验表明，当分配者数量趋近于零时，每个个体获得的量会趋向无限。然而，这种直觉在数学体系中会引发根本性矛盾。

首先，引入“∞”这一“值”将导致环及其算术体系的瓦解。具体表现为：

- 传统算术运算规则失效（如 ∞ $-$ ∞ 未定义）
- 出现大量不定式（如$1 : 0$型表达式）
- 需另外建立特殊处理法则

其次，通过极限理论，在x=0处，函数 $\tfrac{1}{x}$ 同时具有正负两个方向的发散趋势：

- 右极限：$\lim_{x\to +0} \tfrac{1}{x} = +\infty.$
- 左极限：$\lim_{x\to -0} \tfrac{1}{x} = -\infty.$

由于正负无穷不可比较，该点不存在传统意义上的极限值。

而且，在有理数集 $\Q$ 和实数集 $\R$ 中，引入无穷大会破坏原有序关系，导致比较运算的逻辑悖论。

最后，直接承认方程 $0 \cdot x = 1$ 无解具有显著优势：

- 保持算术体系自洽性
- 避免引入矛盾性概念
- 更利于误差处理（如编程中的除零异常）

接受该方程无解的朴素事实，并借助分析学工具（如洛必达法则）处理相关问题，是更为合理且自洽的解决方案。