---
# System prepended metadata

title: Kiến thức C++ (2023 78 B/D)

---

- [ ] 

# Những kiến thức C++ đã học thêm

## Chia trong C++
* Khi a, b là 2 số nguyên (nếu là số thập phân thì những ý sau vẫn hoạt động đúng):
- Chia lấy nguyên: a/b
- Chia lấy dư: a%b
- Chia lấy số thập phân chính xác: (double)a/b, 1.0*a/b

## round(), ceil(), floor() 
- round() làm tròn chính xác (gần nhất)
    - Ví dụ:
        round(8.1) = 8
        round(8.6) = 9
        round(8.5) = 9
- ceil() làm tròn trên:
    - Ví dụ:
        - ceil(10.9) = 11
        - ceil(10.5) = 11
        - ôceil(10.1) = 11
- floor() làm tròn dưới:
    - Ví dụ:
        - floor(10.9) = 10

## [>n && %k==0](https://lqdoj.edu.vn/problem/kh06)
- Đáp án: n/k*k+k
- Giải thích
    - n/k*k thì ta được một số luôn chia hết cho k và nhỏ hơn hoặc bằng n.
    - sau đó cộng k vào phần trên, ta được một số lớn hơn n và vẫn giữ nguyên được tính chất chia hết cho k.
    - 
## GCD, LCM:

* GCD:
    *    Greatest : Lớn nhất
    *    Common: Chung
    *    Divisor: Ước 

Divisors of 18: 1, 2, 3, 6, 9, 18
Divisors of 36: 1, 2, 3, 4, 6, 9, 12, 18, 36
GCD(18, 36) = 18


* LCM:
	* Least: Nhỏ nhất
	* Common: Chung
	* Multiple: Bội

Multiples of 4: 4, 8, 12, 16, 20, 24, 28, ...
Multiples of 7: 7, 14, 21, 28, 35, 42, ...
LCM(4, 7) = 28

## Thuật tìm GCD của Euclid:
    * Giả sử ta đang tìm GCD của a và b
    * Ta thực hiện vòng lặp cho đến khi a vẫn khác b:
        * Nếu a lớn hơn b, gán a = a-b
        * Ngược lại (b > a), gán b = b-a
    * Kết thúc vòng lặp ta được 2 số a và b bằng nhau
    * Vậy UCLN của a và b khi a và b bằng nhau chính là a hoặc b (vì chúng bằng nhau);

* Chứng minh
    * Đặt GCD(a, b) = d
    * => a chia hết cho d, b chia hết cho d
    * Giả sử a > b, ta suy ra được: (a-b) cũng sẽ chia hết cho d
    * Vậy GCD(a, b) = GCD(a-b, b) (Khi a > b)

## Hàm GCD trong C++ 
    * Thư viện <algorithm>
    * Cú pháp: __gcd(a, b)

## Cách tìm UCLN của một mảng số:
    * Ta đặt g là kết quả sau khi tìm ước chung lớn nhất của mảng a, khởi tạo g = 0;
    * Lưu ý gcd(0, x) = x
    * Sau đó ta lần lượt duyệt tất cả các phần tử trong mảng bằng cách gán g là ước chung lớn nhất của g với giá trị hiện tại. (g = gcd(g, a[i]))
    
    * Code python
    `
    g = 0
    for v in arrr:
        g = gcd(g, v)
    `

## 1 giây, C++ xử lí được khoảng 10 mủ 8 phép tính.

## Nhập xuất file
* Khi yêu cầu đề là:
    * Input: CAU1.inp
    * Output: CAU1.out
* Ta sẽ làm như thế này:
```
freopen("CAU1.inp", "r", stdin);
freopen("CAU1.out", "w", stdout);
```

* Khi yêu cầu đề là:
    * Input: stdin
    * Output: stdout
* Ta sẽ làm như thế này:
```
#ifndef ONLINE_JUDGE
freopen("inp.txt", "r", stdin);
#endif
```

## Tăng tốc chương trình C++

```
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0)->sync_with_stdio(0);
```

