Clasa a IX-a · Divizibilitate și numere primeRead in English

Simplificarea unei fracții în C++

În engleză: Simplifying a fraction

O(log n)C++1735 de linii2 exemple

Ideea

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.

Descrierea în engleză

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.

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

Exemple

Exemplul 1

Intrare

84 36

Ieșire așteptată

7 3
Exemplul 2

Intrare

5 9

Ieșire așteptată

5 9

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

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;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.