唯一分解定理介绍及其应用
一、定义
唯一分解定理又称算术基本定理,指:一个大于一的正整数N都可以唯一分解成有限个质数的乘积。 N = P 1 a 1 ⋅ P 2 a 2 ⋅ P 3 a 3 ⋯ P n a n N=P_1^{a_1} \cdot P_2^{a2} \cdot P_3^{a_3} \cdots P_n^{a_n} N=P1a1⋅P2a2⋅P3a3⋯Pnan。这里 P 1 < P 2 < P 3 < ⋯ < P n P_1<P_2<P_3<\cdots<P_n P1<P2<P3<⋯<Pn均为质数, a i a_i ai均为正整数.这样的式子成为N的标准分解式
二、证明
一个数肯定是由合数和质数构成的,合数又可以分解成质数和合数,最后递归下去就会变成质数的乘积
例如:
12
=
3
⋅
4
=
3
⋅
2
⋅
2
12=3\cdot4=3\cdot2\cdot2
12=3⋅4=3⋅2⋅2,这样就完全分解为质数的乘积了,为了方便以后的应用,我们这里书写成指数的形式更好一些,
12
=
2
2
⋅
3
12=2^{2}\cdot3
12=22⋅3,这样的标准形式更好一些。
详细可以看具体严谨证明
三、应用
1.求出数n的因子个数(求出n的约数个数)
个数== ( 1 + a 1 ) ⋅ ( 1 + a 2 ) ⋯ ( 1 + a n ) (1+a_1)\cdot(1+a_2)\cdots(1+a_n) (1+a1)⋅(1+a2)⋯(1+an)这里的ai表示N的标准分解式的幂次数
- 证明由唯一分解定理知道n可以分解为很多质数,那么它的约数必然也可以分解为这些质数中一些的乘积,而分解而来的每个质数都有选和不选两种可能,比如对于12而言, 12 = 2 ⋅ 2 ⋅ 3 = 2 2 ⋅ 3 1 12=2\cdot2\cdot3=2^{2}\cdot3^{1} 12=2⋅2⋅3=22⋅31,那么它的约数个数就是(2+1)*(1+1)=6,也就是1,2,3,4,6,12;
- 1 = 2 0 ⋅ 3 0 1=2^{0}\cdot3^{0} 1=20⋅30
- 2 = 2 1 ⋅ 3 0 2=2^{1}\cdot3^{0} 2=21⋅30
- 3 = 2 0 ⋅ 3 1 3=2^{0}\cdot3^{1} 3=20⋅31
- 4 = 2 2 ⋅ 3 0 4=2^{2}\cdot3^{0} 4=22⋅30
- 6 = 2 1 ⋅ 3 1 6=2^{1}\cdot3^{1} 6=21⋅31
- 12 = 2 2 ⋅ 3 1 12=2^{2}\cdot3^{1} 12=22⋅31
- 容易发现上面的2有三种选择,0次方,1次方,2次方。3有两种选择,0次方,1次方,乘到一块就是3*2种选择,每种选择对应一个约数。
图上很容易看出来一个数的因子一定可以表示成其质因子的乘积形式,所以就有了第二个应用,下面让我们来看一下吧。
2.求所有的因子之和
- 既然学会了怎么求约数总数,想必也是知道这些数都是怎么表示的吧。
- 因数之和= ( P 1 0 + P 1 1 + P 1 2 + ⋯ + P 1 a 1 ) ⋅ ( P 2 0 + P 2 1 + P 2 2 + ⋯ + P 2 a 2 ) ⋯ ( P n 0 + P n 1 + P n 2 + ⋯ + P n a n ) (P_1^{0}+P_1^{1}+P_1^{2}+\cdots+P_1^{a1})\cdot(P_2^{0}+P_2^{1}+P_2^{2}+\cdots+P_2^{a_2})\cdots(P_n^{0}+P_n^{1}+P_n^{2}+\cdots+P_n^{an}) (P10+P11+P12+⋯+P1a1)⋅(P20+P21+P22+⋯+P2a2)⋯(Pn0+Pn1+Pn2+⋯+Pnan)
- 至于证明,把这个表达式展开就是约数之和了。
3.求gcd和lcm
给你两个数如何用唯一分解定理求最小公约数gcd和最大共倍数lcm,假设两个数是a和b则:
a
=
P
1
a
1
⋅
P
2
a
2
⋅
P
3
a
3
⋯
P
n
a
n
a=P_1^{a_1} \cdot P_2^{a_2} \cdot P_3^{a_3} \cdots P_n^{a_n}
a=P1a1⋅P2a2⋅P3a3⋯Pnan
b
=
P
1
b
1
⋅
P
2
b
2
⋅
P
3
b
3
⋯
P
n
b
n
b=P_1^{b_1}\cdot P_2^{b_2} \cdot P_3^{b_3} \cdots P_n^{b_n}
b=P1b1⋅P2b2⋅P3b3⋯Pnbn
那么
gcd(a,b)=
P
1
m
i
n
(
a
1
,
b
1
)
⋅
P
2
m
i
n
(
a
2
,
b
2
)
⋅
P
3
m
i
n
(
a
3
,
b
3
)
⋯
P
n
m
i
n
(
a
n
,
b
n
)
P_1^{min(a_1,b_1)}\cdot P_2^{min(a2,b2)}\cdot P_3^{min(a_3,b_3)} \cdots P_n^{min(a_n,b_n)}
P1min(a1,b1)⋅P2min(a2,b2)⋅P3min(a3,b3)⋯Pnmin(an,bn)
反之求lcm就是把上面得min全部换成max
例如:
4
=
2
2
⋅
3
0
4=2^{2}\cdot3^{0}
4=22⋅30
6==2*3
gcd(4,6)==2min(2,1) * 3min(0,1)==2
lcm(4,6)==2max(2,1) * 3max(0,1)==12
- 补充
一个数的标准分解式不会太长,因为1,2,3,5,7,11,13,17,19,23就这几个数乘积就超过1e8了,int范围的内分解的约数最多大概才1500个