[exaqp]数论
未完工,最起码咕半年才能结束
目录
-
算术基本定理
-
整除
-
质数
-
质数,约数判断
-
算术基本定理
-
质因数分解
-
-
最大公约数
-
前置芝士
-
最大公约数
-
互质
-
辗转相除法(求最大公约数)
-
最小公倍数
-
一、算术基本定理
整除
对于整数 $ a $ , $ b $ , $ b > 0 $ ,则存在唯一的整数 $ q $ , $ r $ ,满足 $ a = bq + r $ ,其中 $ 0 \le r < b $ ,则整数除法记为
其中称 $ 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 $ 的正整数可以分解为若干质数的乘积,且该分解唯一。
其中 \(p_i\) 均为质数,$ p_i < p_{i+1} $ 且 $ c_i > 0 $。
例如 $ 36 $ 可以唯一分解为 $ 36 = 2^2 \times 3^2 $。
约数个数定理
举例:
$ 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⟩ $。
设
则有
如果对于所有 $ i $ 均满足 $ a_i \le b_i$,则有 $ b \mid a $,且
最大公约数
若 $ c $ 同时是 $ a $ 和 $ b $ 的约数,则称 $ c $ 是 $ a $ 和 $ b $ 的公约数。
$ a $ 和 $ b $ 的公约数中最大的一个称为最大公约数。
$ a $ 和 $ b $ 的最大公约数记为 $ \gcd(a,b) $ ,简记为 $ (a,b) $ 。
$ \gcd(a,b) = \gcd(b,a) $
对于任意正整数 $ x $:
设有正整数 $ a \(,\) b $:
则
举例:
$ 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 $,则有
$ \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 $ 存在,至少一个元素。