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

[λ°±μ€€] 2436번: κ³΅μ•½μˆ˜ - C++ λ³Έλ¬Έ

μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[λ°±μ€€] 2436번: κ³΅μ•½μˆ˜ - C++

.23 2022. 2. 25. 16:36
문제

μ–΄λ–€ 두 μžμ—°μˆ˜μ— 곡톡인 μ•½μˆ˜λ“€ μ€‘μ—μ„œ κ°€μž₯ 큰 수λ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜λΌκ³  ν•˜κ³ , 두 μžμ—°μˆ˜μ˜ 곡톡인 λ°°μˆ˜λ“€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 수λ₯Ό μ΅œμ†Œκ³΅λ°°μˆ˜λΌκ³  ν•œλ‹€. 

예λ₯Ό λ“€μ–΄, 두 μžμ—°μˆ˜ 12와 90의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 6이며, μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 180이닀.

이와 λ°˜λŒ€λ‘œ 두 개의 μžμ—°μˆ˜ A, Bκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, Aλ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜λ‘œ, Bλ₯Ό μ΅œμ†Œκ³΅λ°°μˆ˜λ‘œ ν•˜λŠ” 두 개의 μžμ—°μˆ˜λ₯Ό ꡬ할 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜, μ΄λŸ¬ν•œ 두 개의 μžμ—°μˆ˜ μŒμ€ μ—¬λŸ¬ 개 μžˆμ„ 수 있으며, λ˜ν•œ 없을 μˆ˜λ„ μžˆλ‹€. 

예λ₯Ό λ“€μ–΄, μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ 6이며 μ΅œμ†Œκ³΅λ°°μˆ˜κ°€ 180인 두 μ •μˆ˜λŠ” μœ„μ˜ μ˜ˆμ—μ„œμ™€ 같이 12와 90일 μˆ˜λ„ 있으며, 30κ³Ό 36, 18κ³Ό 60, ν˜Ήμ€ 6κ³Ό 180일 μˆ˜λ„ μžˆλ‹€. κ·ΈλŸ¬λ‚˜, μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ 6이며 μ΅œμ†Œκ³΅λ°°μˆ˜κ°€ 20인 두 μžμ—°μˆ˜λŠ” μžˆμ„ 수 μ—†λ‹€.

두 개의 μžμ—°μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 두 수λ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ‘œ ν•˜λŠ” 두 개의 μžμ—°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 

 

μž…λ ₯

첫째 쀄에 두 개의 μžμ—°μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 첫 번째 μˆ˜λŠ” μ–΄λ–€ 두 개의 μžμ—°μˆ˜μ˜ μ΅œλŒ€κ³΅μ•½μˆ˜μ΄κ³ , 두 번째 μˆ˜λŠ” κ·Έ μžμ—°μˆ˜λ“€μ˜ μ΅œμ†Œκ³΅λ°°μˆ˜μ΄λ‹€. μž…λ ₯λ˜λŠ” 두 μžμ—°μˆ˜λŠ” 2 이상 100,000,000 μ΄ν•˜μ΄λ‹€.

 

좜λ ₯

첫째 μ€„μ—λŠ” μž…λ ₯λ˜λŠ” 두 μžμ—°μˆ˜λ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ‘œ ν•˜λŠ” 두 개의 μžμ—°μˆ˜λ₯Ό 크기가 μž‘μ€ μˆ˜λΆ€ν„° ν•˜λ‚˜μ˜ 곡백을 사이에 두고 좜λ ₯ν•œλ‹€. μž…λ ₯λ˜λŠ” 두 μžμ—°μˆ˜λ₯Ό μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ‘œ ν•˜λŠ” 두 개의 μžμ—°μˆ˜ 쌍이 μ—¬λŸ¬ 개 μžˆλŠ” κ²½μš°μ—λŠ” 두 μžμ—°μˆ˜μ˜ 합이 μ΅œμ†Œκ°€ λ˜λŠ” 두 수λ₯Ό 좜λ ₯ν•œλ‹€.


μ—­μ‹œλ‚˜ 접근이 κΉŒλ‹€λ‘œμ› λ˜ 문제...γ…œγ…œ μ²˜μŒμ— μœ ν΄λ¦¬λ“œν˜Έμ œλ²•μ„ μ΄μš©ν•΄μ„œ λ‚˜λ¦„μ˜ ν’€μ΄λ‘œ ꡬ해보렀 ν–ˆλŠ”λ°, κ·Έλž¬λ”λ‹ˆ μ•ˆλ§žλŠ” 쑰건듀이 μƒκΈ°λ©΄μ„œ 닡이 μ•ˆλ‚˜μ™€μ„œ μ–΄λ ΅κ²Œ ν’€μ—ˆλ‹€γ… γ… 

μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œλŒ€κ³΅λ°°μˆ˜λ₯Ό λ¨Όμ € μž…λ ₯받은 λ’€, 이λ₯Ό λ‚˜λˆ μ€€ κ²ƒμ˜ μ•½μˆ˜λ₯Ό κ΅¬ν•œλ‹€. μ•½μˆ˜λ“€ κ°€μš΄λ° μ„œλ‘œμ†ŒμΈ ν•œ μŒμ— λ‹€μ‹œ μ΅œλŒ€κ³΅μ•½μˆ˜λ§ŒνΌμ„ κ³±ν•΄μ€€ 값이 닡이 λœλ‹€.

 

μ½”λ“œ
#include <cstdio>
#include <cmath>

int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);
    
    long long int div = b / a;

    long long int num1 = 0, num2 = 0;
    
    for(long long int i = 1; i * i <= div; i++) {
        if(div % i == 0) {
            long long int temp1 = i;
            long long int temp2 = div / i;

            bool flag = true;
            int count = 0;
            for(int i = 1; i <= temp1; i++) {
                if(temp1 % i == 0 && temp2 % i == 0) count++;

                if(count > 1) {
                    flag = false;
                    break;
                }
            }

            if(flag) {
                num1 = temp1;
                num2 = temp2;
            }
        }
    }

    printf("%lld %lld\n", num1 * a, num2 * a);
    return 0;
}
Comments