#include <iostream>
using namespace std;
 
int ucln(int, int);        // Hàm tìm Ước chung lớn nhất (UCLN) của hai số
int bcnn(int, int);        // Hàm tìm Bội chung nhỏ nhất (BCNN) của hai số
int ucln_nhi(int, int);    // Hàm tìm Ước chung lớn nhì (UCLNh) của hai số
void nhap_so(int&, int&);  // Hàm nhập giá trị cho hai số
void in_ket_qua(int, int); // Hàm in kết quả ra màn hình
 
int main() {
    int a, b;
    nhap_so(a, b);       // Gọi hàm nhập dữ liệu cho hai số a và b
    in_ket_qua(a, b);    // Gọi hàm in kết quả ra màn hình
    return 0;
}
 
void nhap_so(int &a, int &b) {
	do {
		cout << "Nhap so dau tien : ";
		cin >> a;
		cout << "Nhap so thu hai : ";
		cin >> b;
 
		// Kiểm tra điều kiện hợp lệ (hai số phải dương)
		if (a <= 0 || b <= 0) {
			cout << "Nhap so khong hop le! Vui long nhap lai!\n";
		}
	} while (a <= 0 || b <= 0);  // Nếu nhập sai, yêu cầu nhập lại
}
 
// Hàm tìm Ước chung lớn nhất (UCLN) bằng thuật toán Euclid
int ucln(int a, int b) {
    // Lặp cho đến khi phần dư bằng 0
    while (b != 0) {
        int r = a % b;  // Lấy phần dư của a chia b
        a = b;          // Gán lại a = b
        b = r;          // Gán b = phần dư
    }
    return a; // Khi b = 0, a chính là UCLN
}
 
// Công thức: BCNN(a, b) = (a * b) / UCLN(a, b)
int bcnn(int a, int b) {
    return (a * b) / ucln(a, b);
}
 
int ucln_nhi(int a, int b) {
    int g = ucln(a, b);  // Gọi lại hàm UCLN để lấy ước lớn nhất
    int ucln2 = 1;       // Biến lưu ước lớn nhì (ban đầu gán = 1)
 
    // Duyệt ngược từ g/2 về 1 để tìm ước lớn thứ 2 của g
    for (int i = g / 2; i >= 1; i--) {
        if (g % i == 0) { // Nếu i là ước của g
            ucln2 = i;    // Gán giá trị cho ucln2
            break;        // Thoát khỏi vòng lặp ngay (vì i là ước lớn thứ 2)
        }
    }
    return ucln2; // Trả về ước chung lớn nhì
}
 
void in_ket_qua(int a, int b) {
	cout << "Uoc chung lon nhat cua hai so " << a << " va " << b
	     << " la " << ucln(a, b) << "\n";
	cout << "Boi chung nho nhat cua hai so " << a << " va " << b
	     << " la " << bcnn(a, b) << "\n";
	cout << "Uoc chung lon nhi cua hai so " << a << " va " << b
	     << " la " << ucln_nhi(a, b) << "\n";
}