μ΅λ곡μ½μ GCD(Greatest Common Divisor)
μ΅μ곡배μ LCM(Least Common Multiple)
ex) 72 μ 30μ μ΅μ곡배μλ 360μ΄λ€.
μ ν΄λ¦¬λ νΈμ λ²(Euclidean Algorithm)
2κ°μ μμ°μλ₯Ό λ°μ μ΅λ곡μ½μλ₯Ό λ°κΈ° μν΄ 2λΆν° λ μμ°μ μ€ μμ μμ°μκΉμ§ λͺ¨λ λλμ΄λ³΄λ©΄μ κ°μ₯ ν° κ³΅μ½μλ₯Ό ꡬν μ μλ€.
μμ κ°μ λ°©λ²μΌλ‘ λ¬Έμ λ₯Ό νλ©΄ μκ°λ³΅μ‘λλ O(N)μ΄ λλ€. λμ λ°©λ²μ μλμ§λ§ ν¨μ¨μ λμ΄κΈ° μν΄ μ ν΄λ¦¬λ νΈμ λ²μ΄λ μκ³ λ¦¬μ¦μ μ¬μ©νλ©΄ μκ°λ³΅μ‘λλ₯Ό O(logN)μΌλ‘ μ€μΌ μ μλ€.
μ μ
μ¦, μλμ κ°μ μμμΌλ‘ λνλΌ μ μλ€.
μμ
SEQ | GCD(A,B) | A | B | A%B |
1 | GCD(72,30) | 72 | 30 | 12 |
2 | GCD(30,12) | 30 | 12 | 6 |
3 | GCD(12,6) | 12 | 6 | 0 |
μ ν΄λ¦¬λ νΈμ λ²μ μνμ¬ ν΄λΉ μμλλ‘ A%Bκ° 0μ΄λλ μκ° Bμ κ° 6μ΄ μ΅μ곡배μκ° λλ€.
λ°±μ€ 2609λ¬Έμ μ΅λ곡μ½μμ μ΅μ곡배μ
νμ΄
μ ν΄λ¦¬λ νΈμ λ²μ μ¬κ·ν¨μλ‘ λ§λ€μ΄ μ΅λ곡μ½μμ μ΅μ곡배μλ₯Ό ꡬνλ€.
Java
import java.util.Scanner;
public class Main{
public static int gcd(int num1, int num2){
if(num2 == 0) return num1;
else return gcd(num2, num1 % num2);
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt(), num2 = sc.nextInt();
int gcd = gcd(num1, num2);
System.out.println(gcd);
System.out.println(num1 * num2 / gcd);
}
}
λκΈ