#最大公约数
之前,我们学过约数,这次,我们需要找到2个数
a
,
b
a, b
a,b的最大的公约数,我们设
d
=
g
c
d
(
a
,
b
)
d = gcd (a,b)
d=gcd(a,b)为
a
,
b
a,b
a,b的最大公约数
所以有
d
∣
a
d | a
d∣a,
d
∣
b
d | b
d∣b,设
a
=
k
b
+
r
a = kb + r
a=kb+r,其中k为整数
所以
r
=
a
−
k
b
r = a - kb
r=a−kb,根据整除的性质,可得
d
∣
r
d | r
d∣r
故d也是r的公因数,若
g
c
d
(
b
,
r
)
=
c
gcd (b, r) = c
gcd(b,r)=c,则
d
<
=
c
d <= c
d<=c
又有
c
∣
r
c | r
c∣r,
c
∣
b
c | b
c∣b,
a
=
k
b
+
r
a = kb + r
a=kb+r,所以
c
∣
a
c | a
c∣a
所以c是a、b的公约数,即
c
<
=
d
c <= d
c<=d,综上所以
c
=
d
c = d
c=d
所以 g c d ( a , b ) = g c d ( b , a   m o d   b ) , 同 理 也 可 证 = g c d ( b   m o d   a , a ) gcd (a,b) = gcd (b,a \:mod \: b) ,同理也可证= gcd (b \: mod \: a, a) gcd(a,b)=gcd(b,amodb),同理也可证=gcd(bmoda,a)
###code
#include <iostream>
using namespace std;
int gcd1 (int a, int b) {
return b ? gcd1(b, a % b) : a;
}
int gcd2 (int a,int b) {
return a ? gcd2(b % a, a) : b;
}
int main () {
int m,n;
cin >> m >> n;
cout << gcd1 (m,n) << " " << gcd2 (m,n);
}
#最小公倍数
设
a
,
b
a, b
a,b的最小公倍数为
L
L
L,最大公因数为
D
D
D
所以有
L
∣
a
L|a
L∣a,
L
∣
b
L|b
L∣b
且有
a
=
D
x
a = Dx
a=Dx,
b
=
D
y
b = Dy
b=Dy(显然有
x
,
y
x,y
x,y互质)
故满足
L
∣
D
,
 
L
∣
x
,
 
L
∣
y
L|D,\:L|x,\:L|y
L∣D,L∣x,L∣y,所以满足条件的最小的
L
=
D
×
x
×
y
=
a
÷
D
×
b
L=D \times x \times y = a \div D \times b
L=D×x×y=a÷D×b
其实这里可以使用唯一分解定理证明
设
a
=
p
1
a
1
×
p
2
a
2
×
.
.
.
×
p
n
a
n
a = p_{1}^{a_1} \times p_{2}^{a_2} \times ... \times p_{n}^{a_n}
a=p1a1×p2a2×...×pnan
b
=
p
1
b
1
×
p
2
b
2
×
.
.
.
×
p
n
b
n
b = p_{1}^{b_1} \times p_{2}^{b_2} \times ... \times p_{n}^{b_n}
b=p1b1×p2b2×...×pnbn
则明显 D = g c d ( a , b ) = p 1 m i n ( a 1 , b 1 ) × p 2 m i n ( a 2 , b 2 ) × . . . × p n m i n ( a n , b n ) D = gcd(a,b) = p_{1}^{min(a_1,b_1)} \times p_{2}^{min(a_2,b_2)} \times ... \times p_{n}^{min(a_n,b_n)} D=gcd(a,b)=p1min(a1,b1)×p2min(a2,b2)×...×pnmin(an,bn)
而 L = l c m ( a , b ) = p 1 m a x ( a 1 , b 1 ) × p 2 m a x ( a 2 , b 2 ) × . . . × p n m a x ( a n , b n ) L = lcm(a,b) = p_{1}^{max(a_1,b_1)} \times p_{2}^{max(a_2,b_2)} \times ... \times p_{n}^{max(a_n,b_n)} L=lcm(a,b)=p1max(a1,b1)×p2max(a2,b2)×...×pnmax(an,bn)
可得 L = a ÷ D × b L=a \div D \times b L=a÷D×b