파이썬 스터디

유클리드호제법 - 최소공배수(lcm), 최대공약수(gcd) 구하기

0_TLS 2024. 3. 12. 13:52

유클리드 호제법

두 정수 a, b의 최대공약수를 G(a, b)라고 하자.
정수 a, b, q, r (b ≠ 0)에 대하여 a = bq + r,이면 G(a, b) = G(b, r)가 성립한다.

 

〈증명〉
G(a, b) = g라고 하자. 최대공약수의 성질에 의해 a = ag, b = bg이고 G(a′, b′) = 1이다.
a = bq + r로부터 r = a - bq = g(a′ - bq) 이고, g r의 약수이다.
G(b, r) = g임을 보이기 위해서는 G(b′, a′ - bq) = 1임을 보이면 된다.

귀류법을 적용하여 결론을 부정해보자.
어떤 정수 d가 존재하여 G(b′, a′ - bq) =d(≠ 1)라고 하면, b′ = dm, a′ - bq = dn라고 할 수 있고, a′ = bq + dn = dmq + dn = d(mq + n) 이므로 G(a′, b′) = 1라는 가정에 모순이다. 따라서 G(b′, a′ - bq) = 1이므로 G(b, r) = g가 성립한다.

[네이버 지식백과] 유클리드 호제법 (통합논술 개념어 사전, 2007. 12. 15., 한림학사)


 1) 최대공약수

def gcd(a, b):
    while (b>0):
        a, b = b, a % b
    return a

print(gcd(64, 80))

 

math모듈을 사용해서 다음과 같이 더 간단히 작성할 수 있다.

import math
n = math.gcd(64, 80)
print(n)

 

 

2)최소공배수

a = 3
b = 7

def gcd(a, b):
    while (b>0):
        a, b = b, a % b
    return a

result = (a * b) // gcd(a, b)
print(result)

 

math모듈 사용해서 구하기

import math
n = math.gcd(3, 7)
print(3*7 // n)

 

+ lcm 사용하면 더 간단하게 구할 수 있다.

import math
print(math.lcm(3, 7))

'파이썬 스터디' 카테고리의 다른 글

슬라이싱  (0) 2024.04.02
최대공약수, 최소공배수 구하기  (0) 2024.02.16
소수 판별에서 시간 줄이기  (0) 2024.01.05
join  (1) 2024.01.05
collections - Counter  (0) 2023.08.15