# 최대공약수 구하기
def gcd(a, b):
# b가 0이면 a가 최대 공약수
if b == 0:
return a
else:
# a를 b로 나눈 나머지를 구하여 재귀호출
return gcd(b, a % b)
a, b = map(int, input().split()) # 두 수 입력, a > b
result = gcd(a, b)
print(result)
from math import gcd
a, b = map(int, input().split()) # 두 수 입력
result = gcd(a, b)
print(result)
# 최대공약수 구하기
def gcd(a, b):
# b가 0이면 a가 최대 공약수
if b == 0:
return a
else:
# a를 b로 나눈 나머지를 구하여 재귀호출
return gcd(b, a % b)
a, b = map(int, input().split()) # 두 수 입력, a > b
lcm = a * b // gcd(a, b)
print(lcm)
from math import gcd
a, b = map(int, input().split()) # 두 수 입력
lcm = a * b // gcd(a, b)
print(lcm)
lcm
함수도 추가되었다.from math import lcm
a, b = map(int, input().split()) # 두 수 입력
result = lcm(a, b)
print(result)
해를 구하고자 하는 방정식이 ax + by = c
(a, b, c, x, y 는 정수) 와 같을 때 방정식의 해 x, y 를 구하는 알고리즘은 다음과 같다.
x = y'
, y = x' - y' * q
를 역계산한다.x'
는 이전 x
, y'
는 이전 y
를 의미하고 q
는 현재 몫을 의미한다.x
, y
는 이전 값이 없으므로 x'
, y'
를 각각 1, 0으로 지정하여 역계산을 진행한다.x
, y
는 ax + by = gcd(a, b)
를 만족한다.c / gcd(a, b) = K
를 가정하면 최초 방정식의 해는 Kx
, Ky
가 된다.5x + 9y = 2 일 때 만족하는 정수 x, y를 구해보자.
x = y'
, y = x' - y' * q
를 역계산한다.x'
는 이전 x
, y'
는 이전 y
를 의미하고 q
는 현재 몫을 의미한다.x
, y
는 이전 값이 없으므로 x'
, y'
를 각각 1, 0으로 지정하여 역계산을 진행한다.ax + by = gcd(a, b)
를 만족한다.c / gcd(a, b) = K
를 가정하면 최초 방정식의 해를 구할 수 있다.c = 2
, gcd(a, b) = 1
이므로 K = 2
이다.Kx
, Ky
는 각각 2*2 = 4
, 2 * (-1) = -2
가 된다.a, b, c = map(int, input().split()) # ax + by = c 일 때 세 수 입력
# 유클리드 호제법을 이용한 최대 공약수 구하기
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
def solve(a, b):
result = [0] * 2 # x, y를 저장할 배열
# x', y' 초기 값 설정
if b == 0:
result[0] = 1
result[1] = 0
return result
q = a // b # q = a를 b로 나눈 몫
v = solve(b, a % b) # 재귀 형태로 유클리드 호제법 수행
# 역순으로 올라오며 x, y 계산
result[0] = v[1]
result[1] = v[0] - v[1] * q
return result
# c가 최대공약수의 배수가 아니라면 방정식의 해를 구할 수 없음
if c % gcd(a, b) != 0:
print(-1)
else: # 방정식의 해 구하기
k = int(c / gcd(a, b))
ret = solve(a, b)
x = k * ret[0]
y = k * ret[1]
print(x, y)