์ต๋ ๊ณต์ฝ์ ๊ตฌํ๊ธฐ
์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋?
์ต๋ ๊ณต์ฝ์(GCD)๋ฅผ ๊ตฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, gcd(a,b)์ (r=a%b๋ผ๊ณ ํ ๋), gcd(b,r)์ ์ต๋ ๊ณต์ฝ์๋ ๊ฐ๋ค.
์ฆ, gcd(a,b) == gcd(b,r)์ด๋ค.
์ด ์ฑ์ง์ ๋ฐ๋ผ gcd(a,b) == gcd(b, a%b) == gcd(a%b, (a%b)%b).... ๋ฐ๋ณตํ์ฌ ๋๋จธ์ง๊ฐ 0์ด ๋์์ ๋ ๋๋์ด์ง๋ ์๊ฐ a์ b์ ์ต๋๊ณต์ฝ์๊ฐ ๋๋ค.
์ ๋ฆฌํ์๋ฉด gcd(a,b) -> cdg(a, a%b) .... -> gcd(x, 0)์ด๋ฉด a์ b์ ์ต๋ ๊ณต์ฝ์๋ x์ด๋ค.
๊ตฌํ
private static int gcd(int a, int b) {
if(b == 0) return a;
return gcd(b, a%b);
}
์ต์ ๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์์ ๊ด๊ณ
A,B์ ์ต๋๊ณต์ฝ์ = G, ์ต์๊ณต๋ฐฐ์ = L์ด๋ผ๊ณ ํ์.
A = Ga, B = Gb (a์ b๋ ์๋ก์์ด๋ค.)
L = Gab = AB/G
GL = ab
๋ฐ๋ผ์ ์ต์ ๊ณต๋ฐฐ์ L = a*b/G ์ด๋ค.
๊ตฌํ
private static int gcd(int a, int b) {
if(b == 0) return a;
return gcd(b, a%b);
}
private static int lcm(int a, int b) {
return a * b / gcd(a,b);
}