其他分享
首页 > 其他分享> > 数论

数论

作者:互联网

前言

本蒟蒻在写初赛题后听讲评时,听得一脸懵,发现对数论无所了解,于是疯狂地补,此博客在有生之年不会完结(吧),希望 \(hzx\) 不会又说我。

符号

整除符号:\(x \mid y\)

取模符号:\(x \bmod y\)

互质符号:\(x \perp y\)

最大公约数:\(\gcd(x,y)\)

最小公倍数:\(\operatorname{lcm}(x,y)\)

求和符号:\(\sum\)

求积符号:\(\prod\)

阶乘:\(n!\)(即 \(\prod^{n}_{i=1}i\))

注:\(0!=1\)

向下取整:\(\lfloor x \rfloor\)

向上取整:\(\lceil x \rceil\)

数论基础概念

整除

整除的定义

设 \(a,b \in \mathbf{Z},a \ne 0\)。如果 \(\exists q \in \mathbf{Z}\),使得 \(b=aq\),那么就说 \(b\) 可被 \(a\) 整除,记作 \(a \mid b\),且称 \(b\) 是 \(a\) 的倍数,\(a\) 是 \(b\) 的约数(因数)。

注:\(b\) 不被 \(a\) 整除记作 \(a \nmid b\)。

整除的性质

约数和倍数

通过对倍数的定义,可得 \(0\) 是所有非 \(0\) 整数的倍数。(\(0\) 不可以做被除数)

对于任何整数 \(b \ne 0\),对于 \(b\) 的约数只有有限个。

显然约数(显然因数):对于整数 \(b \ne 0\),\(\pm 1\)、\(\pm b\) 是 \(b\) 的显然约数。当 \(b= \pm 1\) 时,\(b\) 只有两个显然约数。

对于整数 \(b \ne 0\),\(b\) 的其他约数为真约数(真因数、非显然约数、非显然因数)。

约数的性质

带余数除法

余数的定义

设 \(a,b\) 为两个给定的正整数,\(a \ne 0\)。设 \(d\) 是一个给定的整数。那么,一定存在唯一的一对整数 \(q,r\),满足 \(b=qa+r(d \le r < |a|+d)\)。

无论整数 \(d\) 取何值,\(r\) 统称为余数。均有 \(a \mid b\) 等价于 \(a \mid r\)。

一般情况下,\(d\) 取 \(0\),此时等式 \(b=qa+r(0 \le r < |a|)\) 称为带余数除法(带余除法)。这里的余数 \(r\) 称为最小非负余数。

余数的另外两种常见取法

绝对最小余数:\(d\) 取 \(|a|\) 的一半的相反数。即 \(b=qa+r(- \frac{|a|}{2} \le r < |a|- \frac{|a|}{2} )\)。

最小正余数:\(d\) 取 \(1\)。即 \(b=qa+r(1 \le r < |a|+1)\)。

带余数除法的余数只有非负最小余数。如果没有特殊证明,余数总是指最小非负余数。

余数的性质

最大公约数与最小公倍数

最大公约数(\(\operatorname{gcd}\))定义

一组整数的公约数,是指同时是这组数中每一个数的约数。\(\pm 1\) 是任意一组整数的公约数。

那么最大公约数,顾名思义,就是这组数的公约数中最大的一个。

求最大公约数(欧几里得算法,也称辗转相除法)

设 \(\forall a,b \in \mathbf{Z}(a > b)\)。

可以整除的情况:如果 \(b\) 是 \(a\) 的约数,那么 \(b\) 就是二者的最大公约数。

不可以整除的情况:\(a=bq+r\)(带余除法),通过证明可得,\(\operatorname{gcd}(a,b)= \operatorname{gcd}(b,a \bmod b)\)。

证明如下:

设 \(a=bq+r(r=a \bmod b)\),设 \(d \mid a,d \mid b\)(即 \(d\) 为 \(a\ b\) 的公约数),则 \(r=a-bq,\frac{r}{d}= \frac{a}{d}- \frac{b}{d}q\)。

由上面的式子可知 \(r \over d\) 为整数,那么可得 \(d \mid r\),所以 \(d\) 也会是 \(a \bmod b\) 的公约数。

可得 \(a,b\) 与 \(a,a \bmod b\) 的公约数相同,那么二者的最大公约数也相同。

即 \(\operatorname{gcd}(a,b)= \operatorname{gcd}(a,a \bmod b)\)。

递归代码易得:

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

最小公倍数(\(\operatorname{lcm}\))定义

一组整数的公倍数,是指同时是这组数中的每一个数的公倍数。\(0\) 是任意一组整数的公倍数。

顾名思义,一组整数的最小公倍数,是指所有正公倍数中最小的一个。

求最小公倍数

设 \(a=p_{1}^{k_{a_1}}p_{2}^{k{a_2}}…p_{n}^{k_{a_n}},b=p_{1}^{k_{b_1}}p_{2}^{k{b_2}}…p_{n}^{k_{a_n}}\)。

对于 \(a\) 和 \(b\),二者的最大公约数是 \(p_{1}^{\max (k_{a_1},k_{b_1})}p_{2}^{\max (k_{a_2},k_{b_2})}…p_{n}^{\max (k_{a_n},k_{b_n})}\)

最小公倍数是 \(p_{1}^{\min (k_{a_1},k_{b_1})}p_{2}^{\min (k_{a_2},k_{b_2})}…p_{n}^{\min (k_{a_n},k_{b_n})}\)

由于 \(k_a+k_b= \max (k_a,k_b)+ \min (k_a,k_b)\)

所以 \(\operatorname{gcd}(a,b) \times \operatorname{lcm}(a,b)=a \times b\),即 \(\operatorname{lcm}(a,b)=a \times b \div \operatorname{gcd}(a,b)\)。

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

int lcm(int a,int b) {
	return a*b*1.0/gcd(a,b);
}

互素

两个整数互素,即 \(\operatorname{gcd}(a,b)=1\)。

多个整数互素,即 \(\operatorname{gcd}(a_1,…,a_n)\)。

多个整数互素,不一定任意两两互素。

素数和合数

素数与合数的定义

设 \(p \ne 0,\pm 1\)。如果除了 \(p\) 的显然约数外 \(p\) 没有其他约数,那么称 \(p\) 为素数(不可约数)。

反之,若 \(p \ne 0,\pm 1\) 且 \(p\) 不是素数,那么称 \(p\) 为合数。

若整数的因数是素数,则该素数成为该整数的素因数(素约数)。

素数与合数的性质

算术基本定理(唯一分解定理)

算术基本引理

设 \(p\) 是素数,\(p \mid a_1a_2\),那么 \(p \mid a_1\) 和 \(p \mid a_2\) 至少有一个成立。

算法基本定理

设正整数 \(a\),那么必有表示(素数与合数的性质):

\[a=p_1p_2p_3…p_n \]

其中 \(p_j(1 \le j \le n)\) 是素数。

将上述表示中相同的素数合并可得标准素因数分解式:

\[a=p_1^{k_1}p_2^{k_2}p_3^{k_3}…p_n^{k_n} \]

算术基本定理与算法基本引理是等价的。

标签:约数,gcd,数论,mid,整数,余数,operatorname
来源: https://www.cnblogs.com/Mr-Lin-081122/p/16537598.html