유클리드 알고리즘은 2개의 자연수 혹은 정식(나 과 같이 분모나 근호 속에 문자를 포함하고 있지 않은 식)의 최대공약수를 구하는 알고리즘의 하나이다. '호제법'이란 말은 두 수가 서로 상대방의 수를 나눠 원하는 수를 얻는 알고리즘이다.
.
- 두개의 자연수 a,b에 대해서, a를 b로 나눈 나머지를 r이라고 한다. (a>b)
 - a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
 - b를 r로 나눈 나머지를 r'라고 한다.
 - b와 r의 최대공약수는 r와 r'의 최대공약수와 같다.
 - 위과정을 반복해서 나머지가 0이 될때 나누는 수가 최대공약수이다.
 
def gcd(a, b):
    while b > 0:
        a, b = b, a % b
    return a
위는 python 으로 작성한 유클리드 호제법을 활용한 최대공약수를 구하는 코드이다. a에는 작은 값이었던 b를 b에는 a를 b로 나눈 나머지를 할당해서 b가 0이 될때까지 반복해(나머지가 0이 될때 나누는 수 → a) a 를 반환한다.
서로 다른 수 a, b의 배수중에서 공통되는 배수 중에 가장 작은 값을 의미한다. 최소공배수는 a, b의 곱을 a, b의 최대 공약수로 나누면 나오게 된다.
ex)
14,6의 최소공배수
1) 14  6=84 (2  7  2  3 = )
2) 84  2= 42 ()
이전의 gcd 최대공약수를 사용하여 쉽게 최소공배수도 구할 수 있다.
def lcm(a, b):
    return a * b / gcd(a, b)