Grade 9 · Divisibility and prime numbersCitește în română

Simplifying a fraction

Original: Simplificarea unei fracții

O(log n)C++1735 lines2 examples

The idea

A fraction a / b becomes irreducible if we divide the numerator and the denominator by gcd(a, b). We compute the GCD on copies, to keep the original values.

Original description (Romanian)

O fracție a / b devine ireductibilă dacă împărțim numărătorul și numitorul la cmmdc(a, b). Calculăm cmmdc-ul pe copii, ca să păstrăm valorile inițiale.

Complexity
O(log(min(a, b)))
Grade
Grade 9 (Clasa a IX-a)

Examples

Example 1

Input

84 36

Expected output

7 3
Example 2

Input

5 9

Expected output

5 9

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

simplificarea-unei-fractii.cpp
/*
 * Titlu: Simplificarea unei fracții
 * Clasa: 9
 * Capitol: Divizibilitate și numere prime
 * Descriere: O fracție a / b devine ireductibilă dacă împărțim numărătorul și
 *            numitorul la cmmdc(a, b). Calculăm cmmdc-ul pe copii, ca să
 *            păstrăm valorile inițiale.
 * Complexitate: O(log(min(a, b)))
 *
 * Exemplu
 * Intrare: 84 36
 * Ieșire: 7 3
 *
 * Exemplu
 * Intrare: 5 9
 * Ieșire: 5 9
 */
#include <iostream>
using namespace std;

int main()
{
    long long a, b;
    cin >> a >> b;
    long long x = a, y = b;
    while (y != 0)
    {
        long long r = x % y;
        x = y;
        y = r;
    }
    cout << a / x << ' ' << b / x << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.