整数唯一分解定理
整数唯一分解定理,也称为算术基本定理,是由德国数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在其著作《算术研究》(Disquisitiones Arithmeticae)中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。
整数唯一分解定理,也称为算术基本定理,是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。
一、整数唯一分解定理
整数唯一分解定理,也称为算术基本定理,是数论中的一个重要定理。它指的是每个大于1的整数都可以唯一地表示为几个素数的乘积,而且这些素数的幂都是正整数。
n=p1a1∗p2a2∗…∗pkak(1)n = p_1^{a_1} * p_2^{a_2} * … * p_k^{a_k}\tag1n=p1a1∗p2a2∗…∗pkak(1)
整数唯一分解的C++代码如下:
void IntDecompose(int n) {
map<int,int> maps; //存储质数以及对应的幂
int i = 2, e = 0;
while (n != 1) {
if (n % i == 0) {
n /= i;
maps[i]++;
}
else i++;
}
auto it = maps.begin(); //输出n对应的分解结果
cout << n << "=" << it->first << "^" << it->second;
for (++it; it != maps.end(); ++it)
cout << " * " << it->first << "^" << it->second;
}
二、数的约数个数
根据整数唯一分解定理,可以得到一个结论:nnn 的正约数的个数为:
F(n)=(a1+1)∗(a2+1)∗⋯(ak+1)(2)F(n) = (a_1+1)*(a_2+1)*\cdots (a_k+1)\tag2F(n)=(a1+1)∗(a2+1)∗⋯(ak+1)(2)
证明:对于 piaip_i^{a_i}piai, 它包含的因子有:pi0,pi1,pi2,⋯ ,piaip_i^0, p_i^1,p_i^2,\cdots ,p_i^{a_i}pi0,pi1,pi2,⋯,piai 共 ai+1a_i+1ai+1个因子。那么,nnn 有多少个因数呢?我们可以:
从 p1p_1p1中取1个因子,有 ai+1a_i+1ai+1种取法;
从 p2p_2p2中取1个因子,有 a2+1a_2+1a2+1种取法;
…;
从 pkp_kpk中取1个因子,有 ak+1a_k+1ak+1种取法。
然后将他们连乘起来。
总的数目为:F(n)=(a1+1)∗(a2+1)∗⋯(ak+1)F(n) = (a_1+1)*(a_2+1)*\cdots (a_k+1)F(n)=(a1+1)∗(a2+1)∗⋯(ak+1)。
三、最大公约数和最小公倍数
给定两个数 xxx 和 yyy,他们可以分解为相同素数的幂的乘积:
x=p1a1∗p2a2∗…∗pkakx = p_1^{a_1} * p_2^{a_2} * … * p_k^{a_k} x=p1a1∗p2a2∗…∗pkaky=p1b1∗p2b2∗…∗pkbk(3) y = p_1^{b_1} * p_2^{b_2} * … * p_k^{b_k} \tag3y=p1b1∗p2b2∗…∗pkbk(3)
例如:给定 x=100,y=210x = 100, y = 210x=100,y=210 则:
100=22∗30∗52∗70100 = 2^2 * 3^0 *5^2*7^0100=22∗30∗52∗70210=21∗31∗51∗71210=2^1 * 3^1 * 5^1 *7^1 210=21∗31∗51∗71
3.1 最大公约数
给定式(3)所示的两个数 x,yx,yx,y, 它们的最大公约数为:
gcd(x,y)=p1min(a1,b1)∗p2min(a2,b2)∗…∗pkmin(ak,bk)(4)gcd(x,y) = p_1^{min(a_1,b_1)} * p_2^{min(a_2,b_2)} * … * p_k^{min(a_k,b_k)} \tag4gcd(x,y)=p1min(a1,b1)∗p2min(a2,b2)∗…∗pkmin(ak,bk)(4)
简单证明:
首先, gcd(x,y)\text{gcd}(x,y)gcd(x,y) 一定能整除 xxx 和 yyy。因为这里所有素数的幂都是取的较小者,即 pip_ipi 的幂为 min(ai,bi)min(a_i,b_i)min(ai,bi), 所以 pimin(ai,bi)∣piaip_i^{min(a_i,b_i)} | p_i^{a_i}pimin(ai,bi)∣piai 且 pimin(ai,bi)∣pibip_i^{min(a_i,b_i)} | p_i^{b_i}pimin(ai,bi)∣pibi。 因此 gcd(x,y)\text{gcd}(x,y)gcd(x,y) 一定能够整除 xxx 和 yyy 。
那么,为什么 gcd(x,y)\text{gcd}(x,y)gcd(x,y) 是 xxx 和 yyy 的最大公约数呢?这里使用反证法。
假设 ggg 才是 xxx 和 yyy 的最大公约数。
那么,必然存在 ggg 包含的某个素数 pip_ipi 的指数 ci>min(ai,bi)c_i > min(a_i,b_i)ci>min(ai,bi)。
但是,此时picip_i^{c_i}pici 要么不能整除 piaip_i^{a_i}piai, 要么不能整除 pibip_i^{b_i}pibi。
因此, ggg 不能同时整除 xxx 和 yyy。
所以,与假设矛盾,gcd(x,y)\text{gcd}(x,y)gcd(x,y) 才是 xxx 和 yyy 的最大公约数。
3.2 最小公倍数
给定式(3)所示的两个数 x,yx,yx,y, 它们的最小公倍数为:
lcm(x,y)=p1max(a1,b1)∗p2max(a2,b2)∗…∗pkmax(ak,bk)(5)lcm(x,y) = p_1^{max(a_1,b_1)} * p_2^{max(a_2,b_2)} * … * p_k^{max(a_k,b_k)} \tag5lcm(x,y)=p1max(a1,b1)∗p2max(a2,b2)∗…∗pkmax(ak,bk)(5)
证明过程与最大公约数类似。
有了最大公约数和最小公倍数的定义,我们得出一个重要的结论:
xy=gcd(x,y)∗lcm(x,y)(4)xy = gcd(x,y)*lcm(x,y)\tag4xy=gcd(x,y)∗lcm(x,y)(4)
因为 :
(p1min(a1,b1)∗p2min(a2,b2)∗…∗pkmin(ak,bk))∗(p1max(a1,b1)∗p2max(a2,b2)∗…∗pkmax(ak,bk))=p1a1+b1∗p2a2+b2∗…∗pkak+bk=xy\left(p_1^{min(a_1,b_1)} * p_2^{min(a_2,b_2)} * … * p_k^{min(a_k,b_k)}\right) *\left(p_1^{max(a_1,b_1)} * p_2^{max(a_2,b_2)} * … * p_k^{max(a_k,b_k)}\right) \\= p_1^{a_1+b_1} * p_2^{a_2+b_2} * … * p_k^{a_k+b_k}=xy(p1min(a1,b1)∗p2min(a2,b2)∗…∗pkmin(ak,bk))∗(p1max(a1,b1)∗p2max(a2,b2)∗…∗pkmax(ak,bk))=p1a1+b1∗p2a2+b2∗…∗pkak+bk=xy
更多推荐

所有评论(0)