๐ Euclidean Algorithm - ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ๋ฌ/ํธ์ ๋ฒ
๐ซ Euclidean Algorithm - ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ๋ฌ/ํธ์ ๋ฒ
r = A % B (์ด๋, A > B)
(A, B ์ต๋๊ณต์ฝ์) == (B, r ์ต๋๊ณต์ฝ์) ๋ฅผ ์ด์ฉํด
(A, B ์ต๋๊ณต์ฝ์)๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
+ (A, B ์ต๋๊ณต์ฝ์)๋ฅผ ์๋ฉด (A, B ์ต์๊ณต๋ฐฐ์)๋ ์ ์ ์์
CPP STL ๋ด์ฅ ํจ์๋ก๋ ์กด์ฌ gcd, lcm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int GCD(int A, int B)
{
int r = 0;
while (A % B != 0)
{
r = A % B;
A = B;
B = r;
}
return B;
}
int LCM(int A, int B)
{
return A * B / GCD(A, B);
}
๐ซ ์ฆ๋ช
(A, B, r โ โ), (0 โค r ๏ผ B ๏ผ A) ์ผ ๋,
gcd(A, B) โ gcd(B, r)
A = qB + r โ B = qr + rโ
pf )
assume gcd(A, B) = g, gcd(B, r) = g
A = ga, B = gb
a, b๋ ์๋ก์ โ gcd(a, b) = 1 (โต if gcd(a, b) = k โ k|A, k|B โ gcd(A, B) = gk โ gcd(A, B) = g)
A = qB + r โ ga = qgb + r (โต A = ga, B = gb)
r = ga - qgb = g(a - qb)
โด g|r
ฮฑ โ (a - qb)
r = gฮฑ
gcd(B, r) = g ๋ฅผ ์ฆ๋ช
ํ๊ธฐ ์ํด์
B = gb, r = gฮฑ ๋ฅผ ๊ฐ์ง๊ณ
gcd(b, ฮฑ) = 1 ์ ์ฆ๋ช
ํด๋ณด์ (โต if gcd(b, ฮฑ) = k โ k|B, k|r โ gcd(B, r) = gk โ gcd(B, r) = g)
๊ท๋ฅ๋ฒ
gcd(b, ฮฑ) = k ์ด๋ผ๋ฉด?
A = qB + r โ ga = qgb + gฮฑ (โต A = ga, B = gb, r = gฮฑ)
b = kฮฒ, ฮฑ = kฮณ
gcd(ฮฒ, ฮณ) = 1 (โต gcd(b, ฮฑ) = k)
A = ga = qgkฮฒ + gkฮณ = gk(qฮฒ + ฮณ)
โด gk | A
B = gb = gkb
โด gk | B
์ด๋ฌ๋ฉด A, B์ ์ต๋๊ณต์ฝ์๊ฐ gk ์ด๋ฏ๋ก gcd(A, B) = g ์ ๋ชจ์
โด gcd(ฮฒ, ฮณ) โ 1, gcd(b, ฮฑ) โ k
โด gcd(b, ฮฑ) = 1
โด gcd(B, r) = g
โด gcd(A, B) = gcd(B, r)
์ด๋ฅผ ํตํด ํฐ ์ (A, B) ๋ฅผ ์์ ์ (B, r) ๋ก ๊ณ์ฐํ ์ ์๋ค.
๐ซ ์ฝ์(็ด-, Divisor) | ์ธ์ (ๅ -, Factor)
๋ฌถ์ฌ์๋ ์
์์ธ, ์์, ์ด์ ๊ฐ ๋๋ ์
(A, B โ โ), A โ 0 ์ผ ๋,
A๊ฐ B์ ์ฝ์ โ B = A * k (k โ โ)
A๊ฐ B์ ์ฝ์ โ A๊ฐ B๋ฅผ ๋๋๋ค โ A|B
๐ซ ๊ณต์ฝ์, ์ต๋๊ณต์ฝ์
๊ณต์ฝ์ - Common Divisor (Factor)
A, B์ ๊ณตํต๋ ์ฝ์
์ต๋๊ณต์ฝ์, GCD, Greatest Common Divisor (Factor)
A, B ์ ๊ณต์ฝ์ ์ค์์ ๊ฐ์ฅ ํฐ ์
gcd(A, B) โ A, B์ ์ต๋๊ณต์ฝ์
A, B ์ ์ต๋๊ณต์ฝ์์ ์ฝ์๋ A, B์ ๊ณต์ฝ์
i.e.
12์ ์ฝ์ : 1, 2, 3, 4, 6, 12
18์ ์ฝ์ : 1, 2, 3, 6, 8, 18
12์ 18์ ๊ณต์ฝ์ : 1, 2, 3, 6
12์ 18์ ์ต๋๊ณต์ฝ์ : 6
6์ ์ฝ์ : 1, 2, 3, 6
๐ซ ์๋ก์ (-็ด , Coprime)
์๋ก ๋ฌถ์ด์ง ์๋ ์, ์๋ก๊ฐ ์์ํ(๊ณตํต์ด ์๋ ์) ์
A, B๊ฐ ์๋ก์๋ค โ ๊ณต์ฝ์(์ต๋๊ณต์ฝ์)๊ฐ 1์ด๋ค โ 1์ ์ ์ธํ ๊ณต์ฝ์๊ฐ ์๋ค โ ๊ณต์ฝ์์ ๊ฐ์๊ฐ 1๊ฐ์ด๋ค
gcd(A, B) = 1
๐ซ ๊ณต๋ฐฐ์, ์ต์ ๊ณต๋ฐฐ์
๊ณต๋ฐฐ์ - Common Multiple
A์ B์ ๊ณตํต๋ ๋ฐฐ์
์ต์ ๊ณต๋ฐฐ์ - LCM, Least/Lowest Common Multiple
A, B ์ ๊ณต๋ฐฐ์ ์ค์์ ๊ฐ์ฅ ์์ ์
lcm(A, B) โ A, B์ ์ต์๊ณต๋ฐฐ์
์ต๋๊ณต์ฝ์๋ฅผ ์๋ค๋ฉด, ์๋ ๊ณต์์ ์ด์ฉํด ๋ฐ๋ก ๊ตฌํ ์ ์์
LCM = A * B / GCD
A * B = GCD * LCM
a = A / GCD, A = a * GCD
b = B / GCD, B = b * GCD
A * B = GCD * a * GCD * b
LCM = a * b * GCD