반응형

   문제

   https://www.acmicpc.net/problem/2609


먼저 앞전에 사용했던 약수를 구하는 방법을 통해 하나의 약수를 모두 구하고 그 약수

들로 다른 수를 나누어보며 최대공약수를 구하고 최소공배수는 두수의 곱에서 최대공약

수를 나눈값으로 구했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
n,m=map(int,input().split())
 
factor=[]
#n의 약수를 모두 하기
p=2
tmp=n
while p*p<=tmp:
    if tmp%p==0:
        factor.append(p)
        tmp//=p
    else:
        p+=1
if tmp>1:
    factor.append(tmp)
#m을 n의 약수로 나누어보며 최대공약수 구하기
mul=1
tmp=m
for i in range(len(factor)):
    if tmp%factor[i]==0:
        mul*=factor[i]
        tmp//=factor[i]
 
print(mul)
print(n*m//mul)
cs


이 방법 외에 유클리드 호제법이라는 최대공약수를 구하는 알고리즘이 있었다.

https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95

어떤 분들은 바로 이해가 되겠지만 저는 아래 유튜브를 통해 이해할수 있었습니다. 

증명은 6분50초부터 보면될거 같습니다.

https://www.youtube.com/watch?v=hqTW8HdjBVw


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n,m=map(int,input().split())
 
if m>n:
    n,m=m,n
 
g=m
r=n%m
while r!=0:#유클리드 호제법
    tmp=r
    r=g%r
    g=tmp
 
print(g)
print(n*m//g)
 
cs



반응형

'알고리즘(python) > 수학' 카테고리의 다른 글

[Python]수학3 백준 3036  (0) 2020.01.21
[Python]수학3 백준 2981  (0) 2020.01.21
[Python]수학3 백준 11653  (0) 2020.01.20
[Python]수학3 백준 1037  (0) 2020.01.19
[Python]수학3 백준 5086  (0) 2020.01.19
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기