(유클리드) 호제법(Euclidean Algorithm)
- 두 정수의 최대공약수(gcd; Greatest Common Divisor)를 쉽게 알아내는 방법
- gcd(0, A) = A
- 모든 수는 0을 나눌 수 있다. 따라서, 0의 모든 약수는 임의의 정수 A를 포함한다.
- 따라서, 둘의 gcd는 A가 된다.
- gcd(a,b) = gcd(b, a%b) (단, a > b) -- b > a이면 값을 바꾼다
cf. 귀류법
- 어떤 명제가 참임을 직접 증명하는 대신, 그 부정 명제가 참이라고 가정하여 그것의 불합리성을 증명함으로써 원래의 명제가 참인 것을 보여 주는 간접 증명법. [네이버사전]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
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());
if (b > a) {
int temp = a;
a = b;
b = temp;
}
int gcd = gcd(a, b);
System.out.println(gcd); // 최대공약수
System.out.println(a * (b / gcd)); // 최소공배수
}
private static int gcd(int a, int b) {
if (a % b != 0) {
return gcd(b, a % b);
} else {
return b;
}
}
}
반복문으로 gcd 구해서 최소공배수 구하기
private static int lcm(int a, int b) {
int tmp1 = a, tmp2 = b;
if (b > a) {
a = tmp2;
b = tmp1;
}
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return tmp1 * (tmp2 / a);
}
에라토스테네스의 체
- 대량의 소수를 한꺼번에 판별하고자 할 때 사용
- 마치 체를 치듯이 수를 걸러낸다고 하여 에라토스테네스의 '체'라고 부른다
- 소수의 배수를 제외함으로써(지움으로써) 소수만 걸러낸다
- cf. 일반적인 반복문으로 주어진 숫자의 제곱근까지만 약수의 여부를 검증해도 된다 => O(N^(1/2))
public class Sieve {
public static void main(String[] args) {
sievePrime();
}
private static void sievePrime() {
int num = 100;
int[] ns = new int[101];
for (int i = 2; i <= num; i++) {
ns[i] = i;
}
for (int i = 2; i <= (int)Math.sqrt(num); i++) {
if (ns[i] == 0) continue;
for (int j = i + i; j <= num; j+=i) {
ns[j] = 0;
}
}
for (int i = 2; i <= num; i++) {
if(ns[i] != 0) System.out.print(ns[i]+" ");
}
}
}
https://www.youtube.com/watch?v=J5Yl2kHPAY4
유클리드 호제법 (개념 이해하기) | 모듈로 연산 | Khan Academy
수학, 예술, 컴퓨터 프로그래밍, 경제, 물리학, 화학, 생물학, 의학, 금융, 역사 등을 무료로 학습해 보세요. 칸아카데미는 어디에서나 누구에게나 세계 최고의 무료 교육을 제공하는 미션을 가진
ko.khanacademy.org
[Algorithm] 에라토스테네스의 체
에라토스테네스의 체 란? 소수를 판별하는 알고리즘이다. 소수들을 대량으로 빠르고 정확하게 구하는 방법이다. 단일 숫자 소수 여부 확인 어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자
velog.io
https://blog.naver.com/ndb796/221233595886
22. 에라토스테네스의 체
에라토스테네스의 체는 가장 대표적인 소수(Prime Number) 판별 알고리즘입니다. 소수란 '양의 약...
blog.naver.com
'문제 및 이론 정리 > 코딩 테스트' 카테고리의 다른 글
[코딩테스트] 확장 유클리드 호제법 접근 방법 (1) | 2024.11.28 |
---|---|
[코딩테스트] 모듈러(%) 분배 법칙 (0) | 2024.11.18 |
[코딩테스트] 오일러 피 (2) | 2024.10.05 |
[코딩테스트] 구간 합, 조합 (0) | 2024.07.08 |