728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.
출력
첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈 칸을 사이에 두고 순서대로 출력한다.
소스코드
#include <iostream> using namespace std; int gcd(int a, int b) { if (b == 0) return a; else gcd(b, a%b); } int main(void) { int a1, a2, b1, b2, lcm, sum, ki; cin >> a1 >> a2; cin >> b1 >> b2; if (a2 > b2) lcm = gcd(a2, b2); else lcm = gcd(b2, a2); lcm = a2*b2 / lcm; a1 = (lcm / a2)*a1, b1 = (lcm / b2)*b1; sum = a1 + b1; if (sum > lcm) ki = gcd(sum, lcm); else ki = gcd(lcm, sum); cout << sum / ki << ' ' << lcm / ki; }
Tip
유클리드 호제법을 이용한 수학 문제
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 1302 - 베스트셀러 (0) | 2018.01.13 |
---|---|
백준] 2810 - 컵홀더(COCI 2011/2012) (0) | 2018.01.11 |
백준] 5032 - 탄산 음료(ACM-ICPC Regional) (0) | 2018.01.09 |
백준] 5545 - 최고의 피자(JOI 2012 예선) (0) | 2018.01.08 |
백준] 3003 - 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2018.01.07 |