# Lời giải bài tính giá trị của biểu thức ###### 📌 Tags: `Math` . ____ ## Ý tưởng :+1: * Cộng giữa hai phân số ta phải quy đồng là điều đương nhiên * Để quy đồng hai phân số ta phải lấy tử nhân với (BCNN của hai mẫu số chia cho mẫu số tương ứng ) * Ta có $BCNN(a , b) = a * b / GCD(a , b)$ ___ ## Các thuật toán tìm ước chung lớn nhất Ta có thể tham khảo ở [đây](https://vnoi.info/wiki/translate/he/So-hoc-Phan-1-Modulo-gcd) ____ ## Nhận xét :bulb: + Quy đồng hai phân số rồi sau đó lấy tử cộng tử + Tiếp tục tối giản phân số kết quả bằng cách chia cả tử và mẫu cho ước chung lớn nhất của tử và mẫu ____ ## Code > **Time:** $O(1)$ > **Space:** $O(n)$ > **Algo:** Sieveing . > [color=lightgreen] :::success :::spoiler code ``` cpp #include <bits/stdc++.h> using namespace std; #define ll long long ll GCD(ll a1 , ll b1){ while(b1 != 0){ a1 = a1 % b1; ll tmp = b1; b1 = a1; a1 = tmp; } return a1; } const ll INF = 1e18 + 7; const ll MAXN = 1e6 + 7; ll a , b , c , d ; int main(){ freopen("EXPVAL.inp" , "r" , stdin); freopen("EXPVAL.out" , "w" , stdout); cin >> a >> b >> c >> d; ll base1 = GCD( b , d); ll LCM = b * d / base1; ll tu1 = a * (LCM / b) ; ll mau1 = LCM; ll tu2 = c * (LCM / d); ll mau2 = LCM; tu1 += tu2; ll base = GCD(tu1 , mau1); tu1 /= base; mau1 /= base; cout << tu1 << " " << mau1 ; return 0; } ``` :::success :::::