반응형
문제
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 |
최근댓글