[exaqp]数论

未完工,最起码咕半年才能结束

目录

  1. 算术基本定理

    1. 整除

    2. 质数

    3. 质数,约数判断

    4. 算术基本定理

    5. 质因数分解

  2. 最大公约数

    1. 前置芝士

    2. 最大公约数

    3. 互质

    4. 辗转相除法(求最大公约数)

    5. 最小公倍数

一、算术基本定理

整除

对于整数 $ a $ , $ b $ , $ b > 0 $ ,则存在唯一的整数 $ q $ , $ r $ ,满足 $ a = bq + r $ ,其中 $ 0 \le r < b $ ,则整数除法记为

\[a ÷ b = q \cdots \cdots r \]

其中称 $ q $ 为商、$ r $ 为余数。

当余数 $ r = 0 $ 时 ,称 $ b $ 整除 $ a $ ,记做 $ b \mid a $,否则记作 $ b \nmid a $。

若 $ b $ 整除 $ a $,称 $ b $ 是 $ a $ 的约数(因数),$ a $ 是 $ b $ 的倍数。

一个数总能被 $ 1 $ 和它本身整除。

质数

对于一个正整数 $ n $,记函数 \(d(n)\) 为 $ n $ 的约数个数。

例如 $ d(6) = 4 $。

若 $ d(n) = 2 $,则称 $ n $ 为质数(也称素数);

若 $ d(n) > 2 $,则称 $ n $ 为合数

$ d(1) = 1 $,因此 $ 1 $ 既不是质数也不是合数;

大于 $ 1 $ 的正整数至少有两个约数($ 1 $ 和本身),因此不是质数就是合数。

所有质数都是 $ 0 $ 的约数(所有数乘 $ 0 $ 都等于 $ 0 $),但讨论时不考虑。

数论函数都是定义在正整数域上的,所以也不考虑负数。

质数,约数判断

用 $ 2 \sim (n-1)$ 的数除 $ n $,如果某个数能整除 $ n $,则 $ n $ 为合数;

反之如果都不能整除 $ n $,则 $ n $ 为质数。

若 $ x $ 是 $ n $ 的约数,则 $ \dfrac{n}{x} $ 也是 $ n $ 的约数,且 $ x $ 和 $ \dfrac{n}{x} $ 之中必有一个 \(\le \sqrt{n}\)

所以只需要枚举 $ 1 \sim \sqrt{n} $ 的所有数,判断是不是 $ n $ 的约数即可。

算数基本定理

唯一分解定理

任意大于 $ 1 $ 的正整数可以分解为若干质数的乘积,且该分解唯一。

\[n = p^{c_1}_1p^{c_2}_2 \cdots p^{a_k}_k \]

其中 \(p_i\) 均为质数,$ p_i < p_{i+1} $ 且 $ c_i > 0 $。

例如 $ 36 $ 可以唯一分解为 $ 36 = 2^2 \times 3^2 $。

约数个数定理

\[d(n) = \prod{i} (c_i+1) \]

举例:

$ 36 = 2^2 \times 3^2 $。

$ d(36) = (2+1) \times (2+1) = 9$

质因数分解

求出正整数 $ n $ 的唯一分解的过程称为质因数分解。

当找到一个质因数 $ d $ 时,将 $ n $ 除以 $ d $ 继续进行质因数分解。

从小到大枚举 $ d $,当 $ d > \sqrt{n} $ 时,说明 $ n $ 为质数,不需要再进行枚举。

相关结论:$ n $ 的大于 $ \sqrt{n} $ 的质因数最多只有一个。

二、最大公约数

前置芝士

约定一个正整数的表示方法:

$ n = ⟨c_1, c_2, c_3, \cdots ⟩ $ 表示 $ n = 2{c_1}35^{c_3}\cdots$,且允许 $ c_i = 0 $。

如 $ 180 = 2^2 \times 3^2 \times 5 = ⟨2,2,1⟩ $。

\[a = ⟨a_1, a_2, a_3, \cdots ⟩ \]

\[b = ⟨b_1, b_2, b_3, \cdots ⟩ \]

则有

\[ab = ⟨a_1 + b_1, a_2 + b_2, a_3 + b_3, \cdots ⟩ \]

如果对于所有 $ i $ 均满足 $ a_i \le b_i$,则有 $ b \mid a $,且

\[a ÷ b = ⟨a_1 − b_1, a_2 − b_2, a_3 − b_3, \cdots ⟩ \]

最大公约数

若 $ c $ 同时是 $ a $ 和 $ b $ 的约数,则称 $ c $ 是 $ a $ 和 $ b $ 的公约数。

$ a $ 和 $ b $ 的公约数中最大的一个称为最大公约数。

$ a $ 和 $ b $ 的最大公约数记为 $ \gcd(a,b) $ ,简记为 $ (a,b) $ 。

$ \gcd(a,b) = \gcd(b,a) $

对于任意正整数 $ x $:

\[\gcd(x,0) = x \ \ \ \ \ \ \ \ \therefore0 = x \times 0 \]

\[\gcd(x,1) = 1 \]

\[\gcd(x,x) = x \]

设有正整数 $ a \(,\) b $:

\[a = ⟨a_1, a_2, a_3, \cdots ⟩ \]

\[b = ⟨b_1, b_2, b_3, \cdots ⟩ \]

\[\gcd(a,b) = ⟨\min(a_1, b_1), \min(a_2, b_2), \min(a_3, b_3), \cdots ⟩ \]

举例:

$ 36 = 2^2 \times 3^2 = ⟨2,2⟩ $

$ 180 = 2^2 \times 3^2 \times 5 = ⟨2,2,1⟩ $

$ \gcd(36,180) = ⟨ \min(2,2),\min(2,2),\min(1,0) ⟩ = ⟨ 2,2,0 ⟩ = 36 $

互质

若 $ (a,b) = 1 $ (即 $ \gcd(a,b) = 1 $ ),称 $ a $ 和 $ b $ 互质,记为 $ a \perp b $。

分别对 $ a $ 和 $ b $ 进行质因数分解,没有相同的质因数。所以 $ a \perp b $。

若 $ p $ 为质数,则 $ p $ 和任意小于 $ p $ 的正整数均互质。

特殊:$ 0 $ 和 $ 1 $ 互质。

解释:因为 $ 0 $ 有无数个约数,而 $ 1 $ 的约数只有一个,就是它本身。0和1的公约数只有 $ 1 $,所以 $ 0 \perp 1 $。

辗转相除法

设 $ d $ 是 $ a $ 和 $ b $ 的公约数,则 $ \dfrac{a}{d} $ 和 $ \dfrac{b}{d} $ 均为整数。

假设 $ a > b $,则有

\[a + b = \dfrac{a}{d} \times d + \dfrac{b}{d} \times d = ( \frac{a}{d} + \frac{b}{d} ) \times d \]

\[a - b = \dfrac{a}{d} \times d - \dfrac{b}{d} \times d = ( \dfrac{a}{d} - \dfrac{b}{d} ) \times d \]

$ \dfrac{a}{d} + \dfrac{b}{d} $ 和 $ \dfrac{a}{d} - \dfrac{b}{d} $ 仍为整数,

故 $ ( a + b ) $ 和 $ ( a - b ) $ 也是 $ d $ 的倍数。

即两数相互加减,公因数不变。

举例:

$ a = 18 , b = 12 , d = 6 $

$ 18 + 12 = \dfrac{18}{6} \times 6 + \dfrac{12}{6} \times 6 = ( \dfrac{18}{6} + \dfrac{12}{6} ) \times 6 $

$ 18 - 12 = \dfrac{18}{6} \times 6 - \dfrac{12}{6} \times 6 = ( \dfrac{18}{6} - \dfrac{12}{6} ) \times 6 $

故有 $ \gcd ( a,b ) = \gcd ( a
\pm b,b ) $

更进一步可知 $ \gcd(a,b) = \gcd(a%b,b) = \gcd(a,a%b) $

又因为 $ a % b \in [ 0 , b-1 ] $,故又可以重复上式中的过程,直到 $ b = 0 $,则此时的 $ a $ 就是最大公约数。

复杂度 $ O(\log(a+b)) $。

最小公倍数

对于两个整数 $ a \(,\) b $,若正整数 $ c $ 既是 $ a $ 的倍数也是 $ b $ 的倍数,则称 $ c $ 是 $ a $ 和 $ b $ 的公倍数。

$ a $ 和 $ b $ 的公倍数中最小的一个称为最小公倍数。

一般记作 $ \operatorname{lcm}(a,b) $,也可简记为 $ [a,b] $。

同余

若两数 $ a $ , $ b $ 除以 $ c $ 的余数相等,则称 $ a $ , $ b $ 模 $ c $ 同余,记做 $ a \equiv b(\bmod \ c)$。

欧几里得算法

问题:给出 $ a $ , $ b $ ,快速求出 $ (a,b) $。

引理:若 $ a < b $ ,则 $ b % a < b/2 $ 。

不断运用 $ (a,b) = (a,b % a) $ ,直到某个数等于 0 。

int gcd(int a,int b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}

欧拉函数

$ \varphi(n) $ 代表 $ 1 \sim n $ 中与 $ n $ 互质的数的个数,称为欧拉函数。

例如 $ 1 \sim 12 $ 中,1 , 5 , 7 , 11 这 4 个数与 12 互质,所以 $\varphi(12)=4 $ 。

快速幂

每次询问给出 $ a $ , $ b $ , $ c $ ,快速求出 $ a^b \ % \ c $ ,不预处理,每次询问 $ O(\log \ b)$ 。

\(a^b=\begin{cases}(a^{\lfloor b/2 \rfloor})^2&b \% 2 ==0\\(a^{\lfloor b/2 \rfloor})^2 \times a&b \% 2 ==1 \end{cases}\) ,只要知道 $ a^{\lfloor b/2 \rfloor} $ ,就能快速求出 $ a^b $ 。

注: $ \lfloor \ \rfloor $ 表示向下取整。

int p(int a,int b,int c)
{
	if(b==0) return 1;
	int ans=p(a,b/2,c);
	ans=ans*ans%c;
	if(b&1) ans=ans*a%c;
   //b&1就等于b%2==1
	return ans;
}
int p(int a,int b,int c)
{
	int ans=1;
	for(;b;b>>=1) //b>>=1等同于b/=2
	{
		if(b&1) ans=ans*a%c;
		a=a*a%c;
	}
	return ans;
}

其他

$ \forall $ 任意,对于所有元素。

$ \exists $ 存在,至少一个元素。

大佬写的数论

exgcd

posted @ 2022-02-14 10:52  exaqp  阅读(114)  评论(3编辑  收藏  举报