<p><b>模除</b>（又稱<b>模數</b>、<b>取模操作</b>、<b>取模運算</b>等，英語：<span lang="en">modulo</span> 有時也稱作 modulus）得到的是一個數除以另一個數的餘數。
</p><p>給定兩個正整數：被除數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span> 和除數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span>，<span><span><i>a</i> modulo <i>n</i></span></span> (縮寫為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a{\bmod {n}}}</annotation>
  </semantics></math></span></span>)得到的是使用歐幾里德除法時 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\frac {a}{n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mrow class="MJX-TeXAtom-ORD">
          <mfrac>
            <mi>a</mi>
            <mi>n</mi>
          </mfrac>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle {\frac {a}{n}}}</annotation>
  </semantics></math></span></span> 的餘數。
舉個例子：計算表達式 "<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 5{\bmod {2}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>5</mn>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>2</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 5{\bmod {2}}}</annotation>
  </semantics></math></span></span>" 得到 1，因為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 5\div 2=2\ldots 1}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>5</mn>
        <mo>÷<!-- ÷ --></mo>
        <mn>2</mn>
        <mo>=</mo>
        <mn>2</mn>
        <mo>…<!-- … --></mo>
        <mn>1</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 5\div 2=2\ldots 1}</annotation>
  </semantics></math></span></span>（5 除以 2 商 2 餘1）；而 "<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 9{\bmod {3}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>9</mn>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>3</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 9{\bmod {3}}}</annotation>
  </semantics></math></span></span>" 得到 0，因為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 9\div 3=3\ldots 0}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>9</mn>
        <mo>÷<!-- ÷ --></mo>
        <mn>3</mn>
        <mo>=</mo>
        <mn>3</mn>
        <mo>…<!-- … --></mo>
        <mn>0</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 9\div 3=3\ldots 0}</annotation>
  </semantics></math></span></span>；注意：如果使用計算器做除法，不能整除時，你不會得到商，而是會得到一個小數，如：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 5\div 2=2.5}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>5</mn>
        <mo>÷<!-- ÷ --></mo>
        <mn>2</mn>
        <mo>=</mo>
        <mn>2.5</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 5\div 2=2.5}</annotation>
  </semantics></math></span></span>。
</p><p>雖然通常情況下 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span> 和 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 都是整數，但許多計算系統允許其他類型的數字操作，如：對浮點數取模。一個整數對 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 取模的結果範圍為： 0 到 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n-1}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
        <mo>−<!-- − --></mo>
        <mn>1</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n-1}</annotation>
  </semantics></math></span></span>（<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a{\bmod {1}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>1</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a{\bmod {1}}}</annotation>
  </semantics></math></span></span>  恆等於 0；<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a{\bmod {0}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>0</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a{\bmod {0}}}</annotation>
  </semantics></math></span></span> 則是未定義的，在程式語言里可能會導致除零錯誤）。
有關概念在數論中的應用請參閱模算數。
</p><p>當 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span> 和 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 均為負數時，通常的定義就不適用了，不同的程式語言對結果有不同的處理。
</p>



<h2><span id=".E5.AE.9A.E7.BE.A9.E4.B8.8E.E4.BD.99.E6.95.B0.E7.9A.84.E8.AE.A1.E7.AE.97"></span><span id="定義与余数的计算">定義與餘數的計算</span></h2>
<p>在數學中，取模運算的結果就是歐幾里德除法的餘數。當然也有許多其他的定義方式。計算機和計算器有許多種表示和儲存數字的方法，因此在不同的硬體環境下、不同的程式語言中，取模運算有著不同的定義。
</p><p>幾乎所有的計算系統中，<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 除 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span> 得到商 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q}</annotation>
  </semantics></math></span></span> 和餘數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle r}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>r</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle r}</annotation>
  </semantics></math></span></span> 均滿足以下式子：
</p>
<dl><dd><dl><dd></dd></dl></dd></dl><p>然而這樣做，當餘數非 0 時，餘數的符號仍然是有歧義的：餘數非 0 時，它的符號有兩種選擇，一個正、一個負。<span id="noteTag-cite_ref-sup"></span>
通常情況下，在數論中總是使用正餘數。但在程式語言中，餘數的符號取決於程式語言的類型和被除數 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span><i>a</i></span></span> 或除數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 的符號。
標準 Pascal 和 ALGOL 68 總是使用 0 或正餘數；另一些程式語言，如 C90 ，當除數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span> 和除數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 都是負數時，C90 標準並沒有做具體的規定，而是留給編譯器去定義並實現。
在大多數系統上 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a{\bmod {0}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>0</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a{\bmod {0}}}</annotation>
  </semantics></math></span></span> 時未定義的，雖然有些系統定義它就等於 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle a}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle a}</annotation>
  </semantics></math></span></span>。更多詳情參見表格。
</p>
<ul><li>很多取模的實現都使用了<i>截斷除法</i>，此時商由截斷函數定義定義 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q=\mathrm {trunc} \left({\frac {a}{n}}\right)}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
        <mo>=</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mi mathvariant="normal">t</mi>
          <mi mathvariant="normal">r</mi>
          <mi mathvariant="normal">u</mi>
          <mi mathvariant="normal">n</mi>
          <mi mathvariant="normal">c</mi>
        </mrow>
        <mrow>
          <mo>(</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>)</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q=\mathrm {trunc} \left({\frac {a}{n}}\right)}</annotation>
  </semantics></math></span></span>，因此由等式 <cite id="math_1" style="font-style: normal;"><b>1</b></cite> 有，餘數<i>和被除數符號一致</i>。商向零取整：結果等於普通除法所得的小數靠近 0 方向的第一個整數。</li></ul><dl><dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle r=a-n\operatorname {trunc} \left({\frac {a}{n}}\right)}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>r</mi>
        <mo>=</mo>
        <mi>a</mi>
        <mo>−<!-- − --></mo>
        <mi>n</mi>
        <mi>trunc</mi>
        <mo>⁡<!-- ⁡ --></mo>
        <mrow>
          <mo>(</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>)</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle r=a-n\operatorname {trunc} \left({\frac {a}{n}}\right)}</annotation>
  </semantics></math></span></span></dd></dl><ul><li>高德納定義的<i>取底除法</i>的商由取底函數定義：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q=[{\frac {a}{n}}]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
        <mo>=</mo>
        <mo stretchy="false">[</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mfrac>
            <mi>a</mi>
            <mi>n</mi>
          </mfrac>
        </mrow>
        <mo stretchy="false">]</mo>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q=[{\frac {a}{n}}]}</annotation>
  </semantics></math></span></span>。因此由等式 <cite id="math_1" style="font-style: normal;"><b>1</b></cite> 有，餘數<i>和除數符號一致</i>。因為使用了取底函數，商總是向下取整，即使商已經是負數。</li></ul><dl><dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle r=a-n\left[{\frac {a}{n}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>r</mi>
        <mo>=</mo>
        <mi>a</mi>
        <mo>−<!-- − --></mo>
        <mi>n</mi>
        <mrow>
          <mo>[</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle r=a-n\left[{\frac {a}{n}}\right]}</annotation>
  </semantics></math></span></span></dd></dl><ul><li>Raymond T. Boute使用的歐幾里得定義中，餘數總是非負的 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 0\leq r}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mn>0</mn>
        <mo>≤<!-- ≤ --></mo>
        <mi>r</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle 0\leq r}</annotation>
  </semantics></math></span></span>，這與歐幾里得算法是一致的。</li></ul><p>在這種情況下：
</p>
<dl><dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n&gt;0\Rightarrow q=\left[{\frac {a}{n}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
        <mo>&gt;</mo>
        <mn>0</mn>
        <mo stretchy="false">⇒<!-- ⇒ --></mo>
        <mi>q</mi>
        <mo>=</mo>
        <mrow>
          <mo>[</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n&gt;0\Rightarrow q=\left[{\frac {a}{n}}\right]}</annotation>
  </semantics></math></span></span></dd>
<dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n&lt;0\Rightarrow q=-\left[-{\frac {a}{n}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
        <mo>&lt;</mo>
        <mn>0</mn>
        <mo stretchy="false">⇒<!-- ⇒ --></mo>
        <mi>q</mi>
        <mo>=</mo>
        <mo>−<!-- − --></mo>
        <mrow>
          <mo>[</mo>
          <mrow>
            <mo>−<!-- − --></mo>
            <mrow class="MJX-TeXAtom-ORD">
              <mfrac>
                <mi>a</mi>
                <mi>n</mi>
              </mfrac>
            </mrow>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n&lt;0\Rightarrow q=-\left[-{\frac {a}{n}}\right]}</annotation>
  </semantics></math></span></span></dd></dl><p>或者等價的：
</p>
<dl><dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q=\operatorname {sgn}(n)\left[{\frac {a}{\left|n\right|}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
        <mo>=</mo>
        <mi>sgn</mi>
        <mo>⁡<!-- ⁡ --></mo>
        <mo stretchy="false">(</mo>
        <mi>n</mi>
        <mo stretchy="false">)</mo>
        <mrow>
          <mo>[</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mrow>
                <mo>|</mo>
                <mi>n</mi>
                <mo>|</mo>
              </mrow>
            </mfrac>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q=\operatorname {sgn}(n)\left[{\frac {a}{\left|n\right|}}\right]}</annotation>
  </semantics></math></span></span></dd></dl><p>這裡的 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {sgn} }">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mrow class="MJX-TeXAtom-ORD">
          <mi mathvariant="normal">s</mi>
          <mi mathvariant="normal">g</mi>
          <mi mathvariant="normal">n</mi>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle \mathrm {sgn} }</annotation>
  </semantics></math></span></span> 是符號函數，因此
</p>
<dl><dd><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle r=a-|n|\left[{\frac {a}{\left|n\right|}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>r</mi>
        <mo>=</mo>
        <mi>a</mi>
        <mo>−<!-- − --></mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo stretchy="false">|</mo>
        </mrow>
        <mi>n</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo stretchy="false">|</mo>
        </mrow>
        <mrow>
          <mo>[</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mrow>
                <mo>|</mo>
                <mi>n</mi>
                <mo>|</mo>
              </mrow>
            </mfrac>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle r=a-|n|\left[{\frac {a}{\left|n\right|}}\right]}</annotation>
  </semantics></math></span></span></dd></dl><ul><li>Common Lisp 也定義了自己的捨入除法和進位除法，商分別定義為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q=\mathrm {round} \left({\frac {a}{n}}\right)}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
        <mo>=</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mi mathvariant="normal">r</mi>
          <mi mathvariant="normal">o</mi>
          <mi mathvariant="normal">u</mi>
          <mi mathvariant="normal">n</mi>
          <mi mathvariant="normal">d</mi>
        </mrow>
        <mrow>
          <mo>(</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mi>a</mi>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>)</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q=\mathrm {round} \left({\frac {a}{n}}\right)}</annotation>
  </semantics></math></span></span> 和 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle q=-\left[{\frac {-a}{n}}\right]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>q</mi>
        <mo>=</mo>
        <mo>−<!-- − --></mo>
        <mrow>
          <mo>[</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mfrac>
              <mrow>
                <mo>−<!-- − --></mo>
                <mi>a</mi>
              </mrow>
              <mi>n</mi>
            </mfrac>
          </mrow>
          <mo>]</mo>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle q=-\left[{\frac {-a}{n}}\right]}</annotation>
  </semantics></math></span></span>。</li>
<li><span data-orig-title="IEEE 754-1985" data-lang-code="en" data-lang-name="英语" data-foreign-title="IEEE 754-1985"><span>IEEE 754</span></span> 定義了一個取余函數，商被定義為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\frac {a}{n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mrow class="MJX-TeXAtom-ORD">
          <mfrac>
            <mi>a</mi>
            <mi>n</mi>
          </mfrac>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle {\frac {a}{n}}}</annotation>
  </semantics></math></span></span>，依據<span data-orig-title="IEEE 754-1985#Rounding floating-point numbers" data-lang-code="en" data-lang-name="英语" data-foreign-title="IEEE 754-1985#Rounding floating-point numbers"><span>捨入約定</span></span>取整。因此餘數的符號選定為<i>最接近0</i>。</li></ul><p><br></p>
<h2><span id=".E5.B8.B8.E8.A7.81.E9.94.99.E8.AF.AF"></span><span id="常见错误">常見錯誤</span></h2>
<p>當取模的結果與被除數符號相同時，可能會導致意想不到的錯誤。
</p><p>舉個例子：如果需要判斷一個整數是否為奇數，有人可能會測試這個數除 2 的餘數是否為 1：
</p>

<p>但在一個取模結果與被除數符號相同的程式語言里，這樣做是錯的。因為當被除數 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span><i>n</i></span></span> 是奇數且為負數時， <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n{\bmod {2}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mn>2</mn>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n{\bmod {2}}}</annotation>
  </semantics></math></span></span> 得到 −1，此時函數返回「假」。
</p><p>一種正確的實現是測試取模結果是否為 0，因為餘數為 0 時沒有符號的問題：
</p>

<p>或者考慮餘數的符號，有兩種情況：餘數可能為 1 或 -1。
</p>

<h2><span id=".E8.AE.B0.E5.8F.B7"></span><span id="记号">記號</span></h2>
<p>一些計算器有取模 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span>mod()</span></span> 按鈕，很多程式語言里也有類似的函數，通常像 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span>mod(<i>a</i>, <i>n</i>)</span></span> 這樣。
有些語言也支持在表達式內使用 "%"、"mod" 或 "Mod" 作為取模或取余操作符。
</p>
<dl><dd><code>a % n</code></dd></dl><p>或
</p>
<dl><dd><code>a mod n</code></dd></dl><p>或者在一些沒有 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span>mod()</span></span> 函數的環境中使用等價的：
（注意 'int' 事實上等價於截斷函數<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\frac {a}{n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mrow class="MJX-TeXAtom-ORD">
          <mfrac>
            <mi>a</mi>
            <mi>n</mi>
          </mfrac>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle {\frac {a}{n}}}</annotation>
  </semantics></math></span></span>，進行了向 0 取整）
</p>
<dl><dd><code>a - (n * int(a/n))</code></dd></dl><h2><span id=".E7.AD.89.E4.BB.B7.E6.80.A7"></span><span id="等价性">等價性</span></h2>
<p>一些取模操作，經過分解和展開可以等同於其他數學運算。這在密碼學的證明中十分有用，例如：迪菲-赫爾曼密鑰交換。
</p>
<ul><li>恆等式：
<ul><li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle (a{\bmod {n}}){\bmod {n}}=a{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle (a{\bmod {n}}){\bmod {n}}=a{\bmod {n}}}</annotation>
  </semantics></math></span></span></li>
<li>對所有的正數 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>x</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle x}</annotation>
  </semantics></math></span></span> 有：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n^{x}{\bmod {n}}=0}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <msup>
          <mi>n</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>x</mi>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mn>0</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n^{x}{\bmod {n}}=0}</annotation>
  </semantics></math></span></span></li>
<li>如果 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>p</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle p}</annotation>
  </semantics></math></span></span> 是一個質數，且不為 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle b}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>b</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle b}</annotation>
  </semantics></math></span></span> 的因數，此時由費馬小定理有：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle ab^{p-1}{\bmod {p}}=a{\bmod {p}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <msup>
          <mi>b</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>p</mi>
            <mo>−<!-- − --></mo>
            <mn>1</mn>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>p</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>p</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle ab^{p-1}{\bmod {p}}=a{\bmod {p}}}</annotation>
  </semantics></math></span></span></li></ul></li>
<li>逆運算：
<ul><li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle [(-a{\bmod {n}})+(a{\bmod {n}})]={\bmod {n}}=0}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mo>−<!-- − --></mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo>+</mo>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mo>=</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mn>0</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle [(-a{\bmod {n}})+(a{\bmod {n}})]={\bmod {n}}=0}</annotation>
  </semantics></math></span></span>.</li>
<li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle b^{-1}{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <msup>
          <mi>b</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mo>−<!-- − --></mo>
            <mn>1</mn>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle b^{-1}{\bmod {n}}}</annotation>
  </semantics></math></span></span> 表示模反元素。若且唯若 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle b}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>b</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle b}</annotation>
  </semantics></math></span></span> 與 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 互質時，等式左側有定義：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle [(b^{-1}{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}=1}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <msup>
          <mi>b</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mo>−<!-- − --></mo>
            <mn>1</mn>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">(</mo>
        <mi>b</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mn>1</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle [(b^{-1}{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}=1}</annotation>
  </semantics></math></span></span>。</li></ul></li>
<li>分配律：
<ul><li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle (a+b){\bmod {n}}=[(a{\bmod {n}})+(b{\bmod {n}})]{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mo>+</mo>
        <mi>b</mi>
        <mo stretchy="false">)</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo>+</mo>
        <mo stretchy="false">(</mo>
        <mi>b</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle (a+b){\bmod {n}}=[(a{\bmod {n}})+(b{\bmod {n}})]{\bmod {n}}}</annotation>
  </semantics></math></span></span></li>
<li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle ab{\bmod {n}}=[(a{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>a</mi>
        <mi>b</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">(</mo>
        <mi>b</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle ab{\bmod {n}}=[(a{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}}</annotation>
  </semantics></math></span></span></li>
<li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle d{\bmod {(}}abc)=(d{\bmod {a}})+a[(d\backslash a{\bmod {b}})]+ab[(d\backslash a\backslash b){\bmod {c}}]}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>d</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mo stretchy="false">(</mo>
          </mrow>
        </mrow>
        <mi>a</mi>
        <mi>b</mi>
        <mi>c</mi>
        <mo stretchy="false">)</mo>
        <mo>=</mo>
        <mo stretchy="false">(</mo>
        <mi>d</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>a</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo>+</mo>
        <mi>a</mi>
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>d</mi>
        <mi class="MJX-variant" mathvariant="normal">∖<!-- ∖ --></mi>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>b</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mo>+</mo>
        <mi>a</mi>
        <mi>b</mi>
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>d</mi>
        <mi class="MJX-variant" mathvariant="normal">∖<!-- ∖ --></mi>
        <mi>a</mi>
        <mi class="MJX-variant" mathvariant="normal">∖<!-- ∖ --></mi>
        <mi>b</mi>
        <mo stretchy="false">)</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>c</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">]</mo>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle d{\bmod {(}}abc)=(d{\bmod {a}})+a[(d\backslash a{\bmod {b}})]+ab[(d\backslash a\backslash b){\bmod {c}}]}</annotation>
  </semantics></math></span></span>，符號 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span>\</span></span> 是歐幾里德除法中的除法操作符，運算結果為商</li>
<li><span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c{\bmod {(}}a+b)=(c{\bmod {a}})+[bc\backslash (a+b)]{\bmod {b}}-[bc\backslash (a+b)]{\bmod {a}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>c</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mo stretchy="false">(</mo>
          </mrow>
        </mrow>
        <mi>a</mi>
        <mo>+</mo>
        <mi>b</mi>
        <mo stretchy="false">)</mo>
        <mo>=</mo>
        <mo stretchy="false">(</mo>
        <mi>c</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>a</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo>+</mo>
        <mo stretchy="false">[</mo>
        <mi>b</mi>
        <mi>c</mi>
        <mi class="MJX-variant" mathvariant="normal">∖<!-- ∖ --></mi>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mo>+</mo>
        <mi>b</mi>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>b</mi>
          </mrow>
        </mrow>
        <mo>−<!-- − --></mo>
        <mo stretchy="false">[</mo>
        <mi>b</mi>
        <mi>c</mi>
        <mi class="MJX-variant" mathvariant="normal">∖<!-- ∖ --></mi>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mo>+</mo>
        <mi>b</mi>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>a</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle c{\bmod {(}}a+b)=(c{\bmod {a}})+[bc\backslash (a+b)]{\bmod {b}}-[bc\backslash (a+b)]{\bmod {a}}}</annotation>
  </semantics></math></span></span>.</li></ul></li>
<li>除法定義：僅當式子右側有定義時，即 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle b}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>b</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle b}</annotation>
  </semantics></math></span></span>、<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n}</annotation>
  </semantics></math></span></span> 互質時有：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\frac {a}{b}}{\bmod {n}}=[(a{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mrow class="MJX-TeXAtom-ORD">
          <mfrac>
            <mi>a</mi>
            <mi>b</mi>
          </mfrac>
        </mrow>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">(</mo>
        <msup>
          <mi>b</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mo>−<!-- − --></mo>
            <mn>1</mn>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle {\frac {a}{b}}{\bmod {n}}=[(a{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}}</annotation>
  </semantics></math></span></span>，其他情況為未定義的。</li>
<li>乘法逆元：<span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle [(ab{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}=a{\bmod {n}}}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mo stretchy="false">[</mo>
        <mo stretchy="false">(</mo>
        <mi>a</mi>
        <mi>b</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">(</mo>
        <msup>
          <mi>b</mi>
          <mrow class="MJX-TeXAtom-ORD">
            <mo>−<!-- − --></mo>
            <mn>1</mn>
          </mrow>
        </msup>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo stretchy="false">)</mo>
        <mo stretchy="false">]</mo>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
        <mo>=</mo>
        <mi>a</mi>
        <mrow class="MJX-TeXAtom-ORD">
          <mo lspace="thickmathspace" rspace="thickmathspace">mod</mo>
          <mrow class="MJX-TeXAtom-ORD">
            <mi>n</mi>
          </mrow>
        </mrow>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle [(ab{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}=a{\bmod {n}}}</annotation>
  </semantics></math></span></span>.</li></ul><h2><span id=".E6.80.A7.E8.83.BD.E9.97.AE.E9.A2.98"></span><span id="性能问题">性能問題</span></h2>
<p>可以通過依次計算帶餘數的除法實現取模操作。特殊情況下，如某些硬體上，存在更快的實現。
例如：2 的 n 次冪的模，可以通過逐位與運算實現：
</p>
<dl><dd><code>x % 2<sup>n</sup> == x &amp; (2<sup>n</sup> - 1)</code></dd></dl><p>例子，假定 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r58896141"><span><span><i>x</i></span></span> 為正數：
</p>
<dl><dd><code>x % 2 == x &amp; 1</code></dd>
<dd><code>x % 4 == x &amp; 3</code></dd>
<dd><code>x % 8 == x &amp; 7</code></dd></dl><p>在進行位操作比取模操作效率更高的設備或軟體環境中，以上形式的取模運算速度更快。</p><p>編譯器可以自動識別出對 2 的 n 次冪取模的表達式，自動將其優化為 <code>expression &amp; (constant-1)</code>。這樣可以在兼顧效率的情況下寫出更整潔的代碼。這個優化在取模結果與被除數符號一致的語言中（包括 C 語言）不能使用，除非被除數是無符號整數。這是因為如果被除數是負數，則結果也是負數，但 <code>expression &amp; (constant-1)</code> 總是正數，進行這樣的優化就會導致錯誤，無符號整數則沒有這個問題。
</p>
<h2><span id=".E7.94.A8.E9.80.94"></span><span id="用途">用途</span></h2>
<ul><li>取模運算可用於判斷一個數是否能被另一個數整除。對 2 取模即可判斷整數的奇偶性；從 2 到 <span><span><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n-1}">
  <semantics>
    <mrow class="MJX-TeXAtom-ORD">
      <mstyle displaystyle="true" scriptlevel="0">
        <mi>n</mi>
        <mo>−<!-- − --></mo>
        <mn>1</mn>
      </mstyle>
    </mrow>
    <annotation encoding="application/x-tex">{\displaystyle n-1}</annotation>
  </semantics></math></span></span> 取模則可判斷一個數是否為質數。</li>
<li>進制之間的轉換。</li>
<li>用於求取最大公約數的輾轉相除法使用取模運算。</li>
<li>密碼學中的應用：從古老的凱撒密碼到現代常用的RSA、橢圓曲線密碼，它們的實現過程均使用了取模運算。</li></ul><h2><span id=".E5.8F.83.E8.A6.8B"></span><span id="參見">參見</span></h2>
<ul><li><span data-orig-title="模 (消歧义)" data-lang-code="en" data-lang-name="英语" data-foreign-title="Modulo (disambiguation)"><span>模 (消歧義)</span></span>和<span data-orig-title="模 (术语)" data-lang-code="en" data-lang-name="英语" data-foreign-title="modulo (jargon)"><span>模 (術語)</span></span> —— 「模數（Modulo）」這個詞的許多用法，都是 1801 年卡爾·弗里德里希·高斯引入模算數時產生的。</li>
<li>模冪運算</li>
<li>同餘</li></ul><h2><span id=".E8.84.9A.E6.B3.A8"></span><span id="脚注">腳註</span></h2>

<h2><span id=".E5.8F.82.E8.80.83.E6.96.87.E7.8C.AE"></span><span id="参考文献">參考文獻</span></h2>
**模除**（又稱**模數**、**取模操作**、**取模運算**等，英語：modulo 有時也稱作 modulus）得到的是一個數除以另一個數的餘數。

給定兩個正整數：被除數 $a$ 和除數 $n$ ，_a_ modulo _n_ (縮寫為 $a{\bmod {n}}$ ) 得到的是使用歐幾里德除法時 ${\frac {a}{n}}$ 的餘數。
舉個例子：計算表達式 " $5{\bmod {2}}$ " 得到 1，因為 $5\div 2=2\ldots 1$ （5 除以 2 商 2 餘 1）；而 " $9{\bmod {3}}$ " 得到 0，因為 $9\div 3=3\ldots 0$ ；注意：如果使用計算器做除法，不能整除時，你不會得到商，而是會得到一個小數，如： $5\div 2=2.5$ 。

雖然通常情況下 $a$ 和 $n$ 都是整數，但許多計算系統允許其他類型的數字操作，如：對浮點數取模。一個整數對 $n$ 取模的結果範圍為： 0 到 $n-1$ （ $a{\bmod {1}}$ 恆等於 0； $a{\bmod {0}}$ 則是未定義的，在程式語言里可能會導致除零錯誤）。
有關概念在數論中的應用請參閱模算數。

當 $a$ 和 $n$ 均為負數時，通常的定義就不適用了，不同的程式語言對結果有不同的處理。

## 定義與餘數的計算

在數學中，取模運算的結果就是歐幾里德除法的餘數。當然也有許多其他的定義方式。計算機和計算器有許多種表示和儲存數字的方法，因此在不同的硬體環境下、不同的程式語言中，取模運算有著不同的定義。

幾乎所有的計算系統中， $n$ 除 $a$ 得到商 $q$ 和餘數 $r$ 均滿足以下式子：

　
: :

然而這樣做，當餘數非 0 時，餘數的符號仍然是有歧義的：餘數非 0 時，它的符號有兩種選擇，一個正、一個負。通常情況下，在數論中總是使用正餘數。但在程式語言中，餘數的符號取決於程式語言的類型和被除數 _a_ 或除數 $n$ 的符號。
標準 Pascal 和 ALGOL 68 總是使用 0 或正餘數；另一些程式語言，如 C90 ，當除數 $a$ 和除數 $n$ 都是負數時，C90 標準並沒有做具體的規定，而是留給編譯器去定義並實現。
在大多數系統上 $a{\bmod {0}}$ 時未定義的，雖然有些系統定義它就等於 $a$ 。更多詳情參見表格。

* 很多取模的實現都使用了_截斷除法_，此時商由截斷函數定義定義 $q=\mathrm {trunc} \left({\frac {a}{n}}\right)$ ，因此由等式 **1** 有，餘數_和被除數符號一致_。商向零取整：結果等於普通除法所得的小數靠近 0 方向的第一個整數。

　
: $r=a-n\operatorname {trunc} \left({\frac {a}{n}}\right)$

* 高德納定義的_取底除法_的商由取底函數定義： $q=[{\frac {a}{n}}]$ 。因此由等式 **1** 有，餘數_和除數符號一致_。因為使用了取底函數，商總是向下取整，即使商已經是負數。

　
: $r=a-n\left[{\frac {a}{n}}\right]$

* Raymond T. Boute 使用的歐幾里得定義中，餘數總是非負的 $0\leq r$ ，這與歐幾里得算法是一致的。

在這種情況下：

　
: $n>0\Rightarrow q=\left[{\frac {a}{n}}\right]$

　
: $n<0\Rightarrow q=-\left[-{\frac {a}{n}}\right]$

或者等價的：

　
: $q=\operatorname {sgn}(n)\left[{\frac {a}{\left|n\right|}}\right]$

這裡的 $\mathrm {sgn} $ 是符號函數，因此

　
: $r=a-|n|\left[{\frac {a}{\left|n\right|}}\right]$

* Common Lisp 也定義了自己的捨入除法和進位除法，商分別定義為 $q=\mathrm {round} \left({\frac {a}{n}}\right)$ 和 $q=-\left[{\frac {-a}{n}}\right]$ 。
* IEEE 754 定義了一個取余函數，商被定義為 ${\frac {a}{n}}$ ，依據捨入約定取整。因此餘數的符號選定為_最接近 0_。

 

## 常見錯誤

當取模的結果與被除數符號相同時，可能會導致意想不到的錯誤。

舉個例子：如果需要判斷一個整數是否為奇數，有人可能會測試這個數除 2 的餘數是否為 1：

但在一個取模結果與被除數符號相同的程式語言里，這樣做是錯的。因為當被除數 _n_ 是奇數且為負數時， $n{\bmod {2}}$ 得到 −1，此時函數返回「假」。

一種正確的實現是測試取模結果是否為 0，因為餘數為 0 時沒有符號的問題：

或者考慮餘數的符號，有兩種情況：餘數可能為 1 或 -1。

## 記號

一些計算器有取模 mod() 按鈕，很多程式語言里也有類似的函數，通常像 mod(_a_, _n_) 這樣。
有些語言也支持在表達式內使用 "%"、"mod" 或 "Mod" 作為取模或取余操作符。

　
: `a % n`

或

　
: `a mod n`

或者在一些沒有 mod() 函數的環境中使用等價的：
（注意 'int' 事實上等價於截斷函數 ${\frac {a}{n}}$ ，進行了向 0 取整）

　
: `a - (n * int(a/n))`

## 等價性

一些取模操作，經過分解和展開可以等同於其他數學運算。這在密碼學的證明中十分有用，例如：迪菲 - 赫爾曼密鑰交換。

* 恆等式：
   * $(a{\bmod {n}}){\bmod {n}}=a{\bmod {n}}$
  * 對所有的正數 $x$ 有： $n^{x}{\bmod {n}}=0$
  * 如果 $p$ 是一個質數，且不為 $b$ 的因數，此時由費馬小定理有： $ab^{p-1}{\bmod {p}}=a{\bmod {p}}$
* 逆運算：
   * $[(-a{\bmod {n}})+(a{\bmod {n}})]={\bmod {n}}=0$ .
  * $b^{-1}{\bmod {n}}$ 表示模反元素。若且唯若 $b$ 與 $n$ 互質時，等式左側有定義： $[(b^{-1}{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}=1$ 。
* 分配律：
   * $(a+b){\bmod {n}}=[(a{\bmod {n}})+(b{\bmod {n}})]{\bmod {n}}$
  * $ab{\bmod {n}}=[(a{\bmod {n}})(b{\bmod {n}})]{\bmod {n}}$
  * $d{\bmod {(}}abc)=(d{\bmod {a}})+a[(d\backslash a{\bmod {b}})]+ab[(d\backslash a\backslash b){\bmod {c}}]$ ，符號 \ 是歐幾里德除法中的除法操作符，運算結果為商
  * $c{\bmod {(}}a+b)=(c{\bmod {a}})+[bc\backslash (a+b)]{\bmod {b}}-[bc\backslash (a+b)]{\bmod {a}}$ .
* 除法定義：僅當式子右側有定義時，即 $b$ 、 $n$ 互質時有： ${\frac {a}{b}}{\bmod {n}}=[(a{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}$ ，其他情況為未定義的。
* 乘法逆元： $[(ab{\bmod {n}})(b^{-1}{\bmod {n}})]{\bmod {n}}=a{\bmod {n}}$ .

## 性能問題

可以通過依次計算帶餘數的除法實現取模操作。特殊情況下，如某些硬體上，存在更快的實現。
例如：2 的 n 次冪的模，可以通過逐位與運算實現：

　
: `x % 2n == x & (2n - 1)`

例子，假定 _x_ 為正數：

　
: `x % 2 == x & 1`

　
: `x % 4 == x & 3`

　
: `x % 8 == x & 7`

在進行位操作比取模操作效率更高的設備或軟體環境中，以上形式的取模運算速度更快。

編譯器可以自動識別出對 2 的 n 次冪取模的表達式，自動將其優化為 `expression & (constant-1)`。這樣可以在兼顧效率的情況下寫出更整潔的代碼。這個優化在取模結果與被除數符號一致的語言中（包括 C 語言）不能使用，除非被除數是無符號整數。這是因為如果被除數是負數，則結果也是負數，但 `expression & (constant-1)` 總是正數，進行這樣的優化就會導致錯誤，無符號整數則沒有這個問題。

## 用途

* 取模運算可用於判斷一個數是否能被另一個數整除。對 2 取模即可判斷整數的奇偶性；從 2 到 $n-1$ 取模則可判斷一個數是否為質數。
* 進制之間的轉換。
* 用於求取最大公約數的輾轉相除法使用取模運算。
* 密碼學中的應用：從古老的凱撒密碼到現代常用的 RSA、橢圓曲線密碼，它們的實現過程均使用了取模運算。

## 參見

* 模 (消歧義) 和模 (術語) —— 「模數（Modulo）」這個詞的許多用法，都是 1801 年卡爾・弗里德里希・高斯引入模算數時產生的。
* 模冪運算
* 同餘

## 腳註

## 參考文獻
%運算