Processing math: 92%
Solutions of Maximum GCD - MarisaOJ: Marisa Online Judge

Solutions of Maximum GCD

Select solution language

Write solution here.


User Avatar giavinh650    Created at    15 likes

# 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(n2log(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>#defelonglong#defeendl\nusingnamespacestd;constN=1e6+10;a[N]={};/mngđá ### 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