Simplificarea fracțiilor

Bază~13 min13 pași

De ce contează?

La o pizza tăiată în 12 felii, mănânci 8. Câtă pizza ai mâncat? 8/12. Dar e mai simplu de spus „2/3" — aceeași cantitate, cu numere mai mici. Simplificarea fracțiilor este exact asta: exprimi același raport în forma cea mai clară posibilă.

Cum se simplifică o fracție?

O fracție p/q se simplifică împărțind atât numărătorul, cât și numitorul cu CMMDC(p, q):

12/18:
CMMDC(12, 18) = 6
12/6 = 2,  18/6 = 3
Forma ireductibilă: 2/3

Rezultatul este ireductibil deoarece după împărțire CMMDC(p/d, q/d) = 1 — nu mai există factor comun.

Observația-cheie

Dacă CMMDC(p, q) = 1, fracția e deja ireductibilă. Împărțirea cu 1 o lasă neschimbată — nu trebuie tratat separat acest caz. Codul funcționează corect indiferent.

Implementare C++

#include <iostream>
using namespace std;

int cmmdc(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}

int main() {
    int p, q;
    cin >> p >> q;

    int d = cmmdc(p, q);
    cout << p / d << "/" << q / d << endl;
    return 0;
}

Exemplu: Input 12 182/3

Cazuri speciale — fracții negative

// Conventie: semnul negativ la numarator, numitor pozitiv
if (q < 0) { p = -p; q = -q; }
int d = cmmdc(abs(p), q);
cout << p / d << "/" << q / d;

Complexitate

CazTimpSpațiu
Simplificare fracțieO(log(min(p,q)))O(1)
Greșeli frecvente

Greșeala 1: Simplifici cu un număr oarecare, nu cu CMMDC. Dacă simplifici 12/18 cu 2 obții 6/9 — reducție parțial corectă, dar nu ireductibilă. Trebuie neapărat CMMDC pentru forma finală.

Greșeala 2: Împarți doar numărătorul sau doar numitorul. Dacă schimbi unul fără celălalt, modifici valoarea fracției — nu mai e echivalentă cu originalul.

Greșeala 3: Aplici cmmdc direct pe numere negative. a % b în C++ poate fi negativ pentru a < 0. Lucrează cu abs(p) și asigură-te că q > 0.

Întrebarea 1 / 3

Forma ireductibilă a fracției 12/18 este: