Ước chung lớn nhất và bội chung nhỏ nhất số lớn
Hệ thống mạng nơ-ron phân tán của AI Empire Academy cần đồng bộ hóa chu kỳ cập nhật trọng số giữa hai cụm GPU độc lập. Cụm thứ nhất phát tín hiệu sau mỗi A nano-giây, cụm thứ hai p…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: while loop, functions, data types.
Nội dung đề bài
Mục tiêu kiến thức
- Cài đặt thuật toán Euclid tìm ước chung lớn nhất (GCD) bằng vòng lặp với độ phức tạp O(log(min(A, B))).
- Hiểu rõ hiện tượng tràn số nguyên (Integer Overflow) trong C++ và cách phòng tránh bằng kiểu dữ liệu
long long. - Kỹ thuật tính bội chung nhỏ nhất (LCM) an toàn: chia trước nhân sau lcm(A, B) = Agcd(A, B) × B.
Mô tả bài toán
Hệ thống mạng nơ-ron phân tán của AI Empire Academy cần đồng bộ hóa chu kỳ cập nhật trọng số giữa hai cụm GPU độc lập. Cụm thứ nhất phát tín hiệu sau mỗi A nano-giây, cụm thứ hai phát tín hiệu sau mỗi B nano-giây (1 ≤ A, B ≤ 109).
Bạn hãy viết chương trình C++:
- Tìm ước chung lớn nhất (UCLN) của A và B.
- Tìm thời điểm đồng bộ hóa đầu tiên, chính là bội chung nhỏ nhất (BCNN) của A và B.
Cảnh báo kỹ thuật: Vì A và B có thể lên tới 109, tích A × B có thể đạt tới 1018, vượt quá giới hạn cực đại của kiểu số nguyên 32-bit int (tối đa ≈ 2.14 × 109). Bắt buộc phải sử dụng kiểu dữ liệu 64-bit có dấu long long. Hơn nữa, ngay cả khi dùng long long, nếu viết biểu thức (A * B) / gcd(A, B) thì phép nhân A * B vẫn có thể gây tràn số nếu giá trị vượt 9 × 1018. Kỹ thuật chuẩn là thực hiện phép chia trước: (A / gcd(A, B)) * B.
Quy ước nộp bài
- Chỉ cần viết một chương trình đọc
stdinvà in rastdout. Bài này không yêu cầu viết hàm. - Không dùng
coutđể in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vàostdoutvà làm bài sai. - Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
- Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.
Input
Một dòng duy nhất chứa 2 số nguyên dương A và B cách nhau bởi một khoảng trắng.
Output
In ra trên một dòng gồm 2 số nguyên cách nhau bởi một khoảng trắng: số thứ nhất là UCLN, số thứ hai là BCNN.
Ràng buộc
- 1 ≤ A, B ≤ 109.
- Thời gian chạy: 1000ms.
- Bộ nhớ tối đa: 256MB.
Ví dụ 1
Input
12 18Output
6 36Ví dụ 2
Input
1000000000 999999999Output
1 999999999000000000Giải thích
Hai số nguyên liên tiếp nguyên tố cùng nhau nên gcd = 1. BCNN = 109 × (109 - 1) = 999999999000000000, giá trị này bắt buộc phải lưu trong kiểu long long.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
