Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Algorithm
- String
- 종만북
- C언어
- server
- JavaScript
- udemy
- 백준
- 따배씨
- BASIC
- 인프런
- BOJ
- programmers
- php
- 생활코딩
- Math
- DP
- graph
- web
- 정수론
- 따라하며 배우는 C언어
- greedy
- C
- Algospot
- Python
- Cleancode
- BFS
- 따라하면서 배우는 C언어
- sorting
- dfs
Archives
- Today
- Total
몽상실현개발주의
[종만북] 두 수의 최대공약수 구하기 / 정수론 / Python 파이썬 본문
[종만북] 두 수의 최대공약수 구하기 / 정수론 / Python 파이썬
1. 유클리드 알고리즘
- 유클리드 알고리즘 (Euclidean algorithm)
- p, q (p > q) 의 공약수의 집합 == p-q, q 의 공약수 집합
- gcd(p, q) == gcd(p-q, q)
- gcd(6, 15) = gcd(9, 6) = gcd(3, 6) = gcd(3, 3) = gcd(3, 0)
def get_gcd(p, q):
if p < q:
p, q = q, p
if q == 0:
return p
return get_gcd(p-q, q)
gcd = get_gcd(6, 15)
print(gcd)
# 3
2. 유클리드 알고리즘 최적화
- gcd(1024, 6) = gcd(1018, 6) = gcd(1012, 6) = .... = gcd(4, 6) = gcd(4, 2) = gcd(2, 2) = gcd(2, 0)
- 하나하나 빼는 것 보다, 나눠서 나머지를 취하자
def get_gcd_new(p, q):
if q == 0:
return p
return get_gcd_new(q, p % q)
gcd = get_gcd_new(1024, 6)
print(gcd)
# 2
'Language > Algorithm' 카테고리의 다른 글
[종만북] POTION / solution 효율적인 알고리즘 / Python 파이썬 (0) | 2021.10.09 |
---|---|
[종만북] POTION / solution 직관적인 알고리즘 / Python 파이썬 (0) | 2021.10.09 |
[종만북] 약수의 개수 구하기 / 정수론 / Python 파이썬 (0) | 2021.09.22 |
[종만북] 빠른 소인수 분해 (에라토스테네스의 체 사용) / 정수론 / Python 파이썬 (0) | 2021.09.22 |
[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬 (0) | 2021.09.22 |
Comments