문제 링크
https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
풀이
- 처음엔 for 문 사용해서 작성했는데 시간 초과
#시간 초과
n, m = map(int,input().split())
for i in range(min(n,m), 0, -1):
if n % i == 0 and m % i == 0 :
print(i)
break
for j in range(max(n,m), n*m+1):
if j % n == 0 and j % m == 0 :
print(j)
break
- 유클리드 호제법 사용
: x, y의 최대공약수는 y, r의 최대 공약수와 같다는 원리는 이용
: 이때 r = x % y
- 최대공약수 : x%y는 0일 때까지 x에는 y를 대입하고 y에는 (x%y) 값을 대입. x가 y로 나누어 떨어질 때의 y값이 x,y의 최대 공약수
- 최소공배수 : x*y를 최대 공약수로 나눈 몫
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):
return (x*y) // gcd(x,y)
print(lcm(n,m))
소수 구하는 방법처럼 알고 있으면 좋을 것 같다 .
- 찾아보니 파이썬의 내장 함수를 사용해도 된다.
- replit 에서는 module 'math' has no attribute 'lcm' 라는 에러가 떴는데 이는 파이썬의 버전이 3.9 이하 일 경우 발생하는 에러라고 한다.
import math
n, m = map(int,input().split())
print(math.gcd(n,m))
print(math.lcm(n,m))
'개발 > algorithm' 카테고리의 다른 글
[백준 2798번] 블랙잭 - python (0) | 2022.02.12 |
---|---|
[백준 2775번] 부녀회장이 될테야 (0) | 2022.02.12 |
[백준 2164번] 카드2 - python (0) | 2022.02.12 |
[백준 1978번] 소수 찾기 -python (0) | 2022.02.12 |
[백준 1929번] 소수 구하기 -python (0) | 2022.02.12 |