일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- Vue
- table
- EXTJS
- 리액트
- reactjs
- javascript
- Intellij
- 개발공부
- React
- restapi
- 개발
- DATABASE
- 데이터베이스
- springboot
- component
- 스프링
- 보안취약점
- mssql
- 쿼리
- 스프링부트
- 자바
- Spring
- jdk
- 컴포넌트
- GIT
- crud
- sql
- JS
- 자바스크립트
- java
- Today
- Total
준준의 기록일지
[알고리즘]최소공배수와 최대공약수, 유클리드 호제 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
최소공배수 - lcm(a,b) or [a,b]로 표기한다.
- 공배수란, 두수, 혹은 그 이상의 수들의 공통인 배수라는 뜻이다.
- 그러므로 최소공배수는 공배수 중에서 가장 작은 수를 뜻한다.
예시로,
10 : 10, 20, 30, 40, 50, 60, 70, ....
12 : 12, 24, 36, 48, 60, 72......
일때 공배수 중에 가장 작은 수인 60이 최소공배수가 된다.
숫자로 나열하는게 힘들다면, 소인수분해를 사용해 찾을 수 있다.
10 = 2x5
12 = 2^2x3
중복되는 소인수의 차수가 큰 횟수만큼,
나머지 소인수를 모두 곱해주주면
-> 그 값이 최소공배수!
즉, 2를 두 번, 3을 한 번, 그리고 5를 한 번 곱한 값 -> 60.
최대공약수 - gcd(a,b) or (a,b)로 표기한다.
- 공약수란, 두수, 혹인 그 이상의 여러 수의 공통인 약수라는 뜻이다.
- 그러므로 최대공약수는 공양수 중에서 가장 큰 것.
예시로,
12 : 1, 2, 3, 4, 6, 12
18 : 1, 2, 3, 6, 9 ,18
일때 모두 같이 있는 숫자가 공약수가 된다.
즉 이 경우에는 1, 2, 3, 6이 공약수!
최대공약수는 찾은 공약수 중에 가장 큰 6이 된다.
유클리드 호제법
- 2015, 246과 같이 두 수의 약수를 찾는게 어려울 때, 사용하자.
두 양의 정수 a,b (b>a)에 대하여 b=aq+r, (0=<r<a)라 하면, a,b의 최대공약수는 a,r의 최대공약수와 같다. 즉, gcd(a,b) = gcd(a,r)
- 예제로
72와 40의 최대공약수를 유클리드 호제법을 이용해 구해보자.
72>40
72=40x1+32
40=32x1+8
32=8*4+0
나머지가 0이 되기 바로 직전 연산의 나머지가 원래 두 수의 최대공약수가 된다.
즉, 8.
[JAVA 구현코드]
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
29
30
31
32
33
34
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Quiz_2609 {
public static void main(String[]args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int bigger = Math.max(A,B);
int smaller = Math.min(A,B);
int gcm = gcm(bigger, smaller);
int lcm = A*B/gcm;
System.out.println(gcm);
System.out.println(lcm);
}
public static int gcm(int big, int small){
while(small>0){
int r=big%small;//나머지
big=small;
small=r;
}
return big;
}
}
|
cs |
'알고리즘' 카테고리의 다른 글
DFS 재귀함수 (liquor tree) (0) | 2022.04.13 |
---|---|
[기본 알고리즘 정리] 배열, 큐 (0) | 2021.09.06 |
[알고리즘] 백준 9631번 문제 GCD 합 (0) | 2020.07.29 |