보통 두 수가 주어지면, 최대공약수와 최소공배수를 구하는 것을 하지만, 이 문제는 최대공약수와 최소공배수가 주어지면, 그러한 최대공약수와 최소공배수를 가지는 두 수를 구하는 문제입니다.
https://www.acmicpc.net/problem/2436
2436번: 공약수
첫째 줄에 두 개의 자연수가 빈칸을 사이에 두고 주어진다. 첫 번째 수는 어떤 두 개의 자연수의 최대공약수이고, 두 번째 수는 그 자연수들의 최소공배수이다. 입력되는 두 자연수는 2 이상 100,0
www.acmicpc.net
두 수
최소공배수를 최대공약수로 나누면 우리는
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #2436 - Common Divisors
// - by Aubrey Choi
// - created at 2019-07-23
//------------------------------------------------
#include <stdio.h>
#include <math.h>
int gcd(int a, int b) { while(b) { int t=b; b=a%b; a=t; } return a; }
int main()
{
int a, b;
scanf("%d%d", &a, &b);
b /= a;
for(int r = (int)sqrt(b); r >= 1; r--)
{
if(b%r) continue;
if(gcd(b/r, r)==1) { printf("%d %d\n", a*r, b/r*a); break; }
}
}

반응형
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2447 별 찍기 - 10(재귀 함수) (0) | 2023.05.06 |
---|---|
[C/C++] 백준 #2437 저울(탐욕 알고리즘) (2) | 2023.05.02 |
[C/C++] 백준 #2417 정수 제곱근(수학) (0) | 2023.04.30 |
[C/C++] 백준 #2410 2의 멱수의 합(동적 계획법) (0) | 2023.04.29 |
[Python] 백준 #2407 조합(수학) (0) | 2023.04.29 |
댓글