𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 2609번: μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜ - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 2609번: μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜ - C++

.23 2021. 8. 15. 04:12
문제

두 개의 μžμ—°μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ μ΅œλŒ€ κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œ 곡배수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 μ€„μ—λŠ” 두 개의 μžμ—°μˆ˜κ°€ 주어진닀. 이 λ‘˜μ€ 10,000μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ©° 사이에 ν•œ 칸의 곡백이 주어진닀.

 

좜λ ₯

첫째 μ€„μ—λŠ” μž…λ ₯으둜 주어진 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό, λ‘˜μ§Έ μ€„μ—λŠ” μž…λ ₯으둜 주어진 두 수의 μ΅œμ†Œ 곡배수λ₯Ό 좜λ ₯ν•œλ‹€.


μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ„ μ΄μš©ν•˜μ—¬ ν‘ΈλŠ” λ¬Έμ œμ΄λ‹€.

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ€ 2개의 μžμ—°μˆ˜μ˜ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ ν•˜λ‚˜μ΄λ‹€.

 

a > b 인 두 μˆ˜κ°€ μžˆμ„ λ•Œ, aλ₯Ό b둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€κ°€ rμΌλ•Œ, a와 b의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” b와 r의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ κ°™λ‹€. 같은 μ›λ¦¬λ‘œ 계속 값을 κ΅¬ν•˜μ—¬ λ‚˜λ¨Έμ§€κ°€ 0이 됐을 λ•Œμ˜ λ‚˜λˆ„λŠ” μˆ˜κ°€ a와 b의 μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ λœλ‹€.

예λ₯Ό λ“€μ–΄ 414와 72의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜μžλ©΄,

 

414 = 72 * 5 + 54

72 = 54 * 1 + 18

54 = 18 * 3 + 0

 

λ”°λΌμ„œ 414와 72의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 18이 λœλ‹€.

 

μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” a와 bλ₯Ό κ³±ν•œ 값에 a와 b의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό λ‚˜λˆˆ κ°’κ³Ό κ°™λ‹€. λ”°λΌμ„œ μœ„μ˜ μ„±μ§ˆλ“€μ„ μ΄μš©ν•˜μ—¬ μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

 

int GCD(int a, int b) {
    return b ? GCD(b, a % b) : a;
}

int LCM(int a, int b) {
    return a * b / GCD(a, b);
}

 

전체 μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

μ½”λ“œ
#include <cstdio>

int GCD(int a, int b);
int LCM(int a, int b);

int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);

    printf("%d\n", GCD(a, b));
    printf("%d\n", LCM(a, b));
    return 0;
}

int GCD(int a, int b) {
    return b ? GCD(b, a % b) : a;
}

int LCM(int a, int b) {
    return a * b / GCD(a, b);
}
Comments