---
# System prepended metadata

title: Lời giải bài  tính giá trị của biểu thức

---

# 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
:::::