# Nhắc nhở:
### Khuyến khích mọi người nên tự tìm hiểu, suy nghĩ lời giải trước khi tham khảo
### Nên đọc kỹ hướng dẫn trước khi tham khảo bài làm
___________________________________________________________________________________
### Cách 1: Duyệt
Chúng ta sẽ duyệt lần lượt từng cặp số (Ai, Aj) để lấy ước chung lớn nhất.
> Các bạn có thể sử dụng [Giải thuật Euclid](https://vi.wikipedia.org/wiki/Gi%E1%BA%A3i_thu%E1%BA%ADt_Euclid) để tìm UCLN với thời gian tối ưu (độ phức tạp O(log(n)).
> Có thể sử dụng hàm _gcd() trong C++ để tìm UCLN của 2 số (cũng dùng giải thuật Euclid).
Độ phức tạp: O(n2∗log(n))
### Cách 2: Sàng đếm
Cải tiến của sàng nguyên tố: lưu các giá trị được nhập vào 1 mảng đánh dấu, rồi duyệt i từ 1 đến giá trị ước lớn nhất có thể (106)
Với mỗi lần duyệt, chúng ta sẽ lại duyệt các bội của i, cộng vào số lượng số là bội của i vào mảng đếm (tức với
mỗi giá trị i, chúng ta sẽ đếm xem có bao nhiên số nhập vào là bội của i, hay có bao nhiêu số lấy i làm ước).
Cuối cùng, chúng ta sẽ duyệt mảng đếm xem có ước nào có ít nhất 2 số chia hết thì lấy max, rồi in ra max sau khi duyệt.
Độ phức tạp: O(N * log(n))
## Bài giải:
> Giải thuật: sàng đếm
> Độ phức tạp: O(N * log(n))
> Ngôn ngữ lập trình: **C++ 11**
cpp#∈clude<bitsstdc++.h>#def∈e∫longlong#def∈eendl\nusingnamespacestd;const∫N=1e6+10;∫a[N]={};/mảngđá
### Lưu ý: có thể có nhiều hơn một cách làm nên các bạn không nhất thiết phải làm theo lời giải