일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 디자인 패턴
- IT
- 네트워크
- spring webflux
- Heap
- Proxy
- react
- redis
- JPA
- Java
- OS
- Spring
- JavaScript
- 컴퓨터구조
- Kafka
- Galera Cluster
- mongoDB
- 파이썬
- MSA
- Algorithm
- 운영체제
- 자료구조
- Data Structure
- MySQL
- 알고리즘
- 백준
- C
- c언어
- 자바
- design pattern
Archives
- Today
- Total
시냅스
백준 boj 2609 - 최대공약수와 최소공배수 (파이썬, python) 본문
https://www.acmicpc.net/problem/2609
역시 이 문제 또한 일반 반복문을 통하여 해결하였을 때에는 시간초과로 틀리게 된다...
유클리드 호제법이란 것을 활용해야 하는데,
유클리트 호제법이란 x, y의 최대공약수는 y, x % y 의 최대공약수와 같다는 원리를 이용한다.
x % y 의 값이 0이 됐을 때의 y 값이 결국 최대 공약수가 된다.
이게 뭔소리냐면...
10 과 6 을 예시로 든다면,
x | y | x%y |
10 | 6 | 4 |
6 | 4 | 2 |
4 | 2 | 0 |
결국, 최대 공약수는 2 이다.
증명은 나무위키에 잘 나와 있다.
https://namu.wiki/w/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C%20%ED%98%B8%EC%A0%9C%EB%B2%95
최소 공배수는 주어진 값들의 곱을 최대 공약수로 나눠주면 된다.
code
n, m = map(int, input().split())
def gcd(x, y):
while(y):
x, y = y, x % y
return x
print(gcd(n,m))
def lcm(x, y):
result = (x * y) // gcd(x, y)
return result
print(lcm(n, m))
'알고리즘' 카테고리의 다른 글
백준 boj 17425 - 약수의 합 (파이썬, python) (0) | 2022.02.08 |
---|---|
백준 boj 6588 - 골드바흐의 추측 (파이썬, python) (0) | 2022.02.08 |
백준 boj 1978 - 소수 찾기 (파이썬, python) (0) | 2022.02.08 |
백준 boj 4375 - 1 (파이썬, python) (0) | 2022.02.07 |
백준 boj 17427 - 약수의 합 2 (파이썬, python) (0) | 2022.02.07 |
Comments