GCD(์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜), LCM(์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜) ๊ตฌํ•˜๊ธฐ

์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ 

์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜(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);
    }