728x90
최대 공약수
- 숫자 a,b가 주어졌을 때, 공통되는 약수 중 최대 값을 의미한다.
- 구하는 방법
- a,b 각각의 약수를 구해서 공통되는 약수 중 가장 큰 값을 찾는 방법
- 찾지 않아도 되는 약수들까지 구해야하기 때문에 비효율적이다.
- 유클리드 호제법
- 숫자 a,b가 있을 때, a를 b로 나눈 나머지와 b의 최대 공약수는 a와 b의 최대 공약수가 같다는 것을 의미한다.
- 따라서, a를 b로 계속 나누어서 b에 a로 나눈 나머지를 대입시켜서 b가 0이 될 때까지 반복을 하면, 남는 a의 값이 바로 최대 공약수이다.
- a,b 각각의 약수를 구해서 공통되는 약수 중 가장 큰 값을 찾는 방법
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
최소 공배수
- 서로 다른 수 a,b의 배수 중에서 공통되는 배수 중 가장 작은 값을 의미
- 최소 공배수는 a,b의 곱을 a,b의 최대 공약수로 나누면 나오게 된다.
( 최소 공배수 x 최대 공약수) = gcd^2 * m * n [ m,n은 서로소 ] => a * b
def lcm(a, b):
return a * b / gcd(a, b)
728x90
'ALGORITHM > 알고리즘 알아보기' 카테고리의 다른 글
[Algorithm] 플로이드-워셜 (0) | 2022.12.18 |
---|---|
[Algorithm] 최장 공통 부분 수열 (LCS) (0) | 2022.12.13 |
[Algorithm] 벨만-포드 알고리즘 (0) | 2022.12.07 |
[Algorithm] 투 포인터 (Two Pointer) (0) | 2022.12.03 |
[알고리즘] 이분 탐색, 매개변수 탐색 (0) | 2022.10.06 |