ํฌ์ŠคํŠธ

๐ŸŒ“ 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

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.