1. 程式人生 > >大數同餘定理

大數同餘定理

(a+b)%c=(a%c+b%c)%c

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring> 
using namespace std;
char a[1000];
int n,i;
int main()
{
	while (~scanf("%s%d",a,&n))
	{
		int m=0;
		int l=strlen(a);
		for (i=0;i<l;i++)
			m=((m*10)%n+(a[i]-'0'))%n;
		cout<<m<<endl;
	}
	return 0;
}


數學上,當兩個整數以同一個整數,若得相同餘數,則二整數同餘。同餘理論常被用於數論中。最先引用同餘的概念與“≡”符號者為德國數學家高斯

同餘符號

兩個整數ab,若它們除以正整數m所得的餘數相等,則稱ab對於模m同餘

記作a \equiv b \pmod{m}

讀作a同餘於bm,或讀作ab關於模m同餘。

比如26 \equiv 14 \pmod{12}

同餘於的符號是同餘相等符號 。統一碼值為 U+2261。但因為方便理由,人們有時會把它(誤)寫為普通等號 (=)。

整除性

a \equiv b \pmod{m} \Rightarrow c\cdot m=a-b, c \in \mathbb{Z} (即是說 a 和 b 之差是 m 的倍數)
換句話說,a \equiv b \pmod{m} \Rightarrow m \mid(a-b)[注 1]

傳遞性

\left. \begin{matrix}a \equiv b \pmod{m} \\b \equiv c \pmod{m}\end{matrix} \right\} \Rightarrow a \equiv c \pmod{m}

保持基本運算

\left. \begin{matrix}a \equiv b \pmod{m} \\c \equiv d\pmod{m}\end{matrix} \right\} \Rightarrow \left\{ \begin{matrix} a \pm c \equiv b \pm d \pmod{m} \\ ac \equiv bd \pmod{m} \end{matrix} \right.
這性質更可進一步引申成為這樣:
a \equiv b \pmod{m} \Rightarrow \begin{cases} an \equiv bn \pmod{m}, \forall n \in \mathbb{Z} \\ a^n \equiv b^n \pmod{m}, \forall n \in \mathbb{N}^0\end{cases}

除法原理

a \equiv b \pmod{cn} \Rightarrow a \equiv b \pmod n
\left. \begin{matrix} a \equiv b \pmod{m} \\ n|m \end{matrix} \right\} \Rightarrow a \equiv b \pmod n[注 1]
\left. \begin{matrix} ac \equiv bc \pmod{m} \\ (c, m) = 1 \end{matrix} \right\} \Rightarrow a \equiv b \pmod m[注 2]

\left. \begin{matrix} a \equiv b \pmod{m_1} \\ a \equiv b \pmod{m_2} \\ \vdots \\ a \equiv b \pmod{m_n} \\ (n \ge 2) \end{matrix} \right\} \Rightarrow a \equiv b \pmod{[m_1,m_2,\cdots,m_n]}[注 3]

尤拉定理

主條目:尤拉定理

a^{\varphi (n)} \equiv 1 \pmod{n}

威爾遜定理

主條目:威爾遜定理

(p-1)!\ \equiv\ -1\ (\mbox{mod}\ p)

整除多項式

因為\binom{t}{k} =\frac{(t)_k}{k!},而組合數整數,多項式(t)_k整除階乘k!。

(t)_k \equiv t(t-1)(t-2)\cdots(t-k+1) \equiv 0 (mod k!)

例子

  • 自然數a的個位數字,就是求a與哪一個數對於模10同餘。