fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int ucln(int, int); // Hàm tìm Ước chung lớn nhất (UCLN) của hai số
  5. int bcnn(int, int); // Hàm tìm Bội chung nhỏ nhất (BCNN) của hai số
  6. int ucln_nhi(int, int); // Hàm tìm Ước chung lớn nhì (UCLNh) của hai số
  7. void nhap_so(int&, int&); // Hàm nhập giá trị cho hai số
  8. void in_ket_qua(int, int); // Hàm in kết quả ra màn hình
  9.  
  10. int main() {
  11. int a, b;
  12. nhap_so(a, b); // Gọi hàm nhập dữ liệu cho hai số a và b
  13. in_ket_qua(a, b); // Gọi hàm in kết quả ra màn hình
  14. return 0;
  15. }
  16.  
  17. void nhap_so(int &a, int &b) {
  18. do {
  19. cout << "Nhap so dau tien : ";
  20. cin >> a;
  21. cout << "Nhap so thu hai : ";
  22. cin >> b;
  23.  
  24. // Kiểm tra điều kiện hợp lệ (hai số phải dương)
  25. if (a <= 0 || b <= 0) {
  26. cout << "Nhap so khong hop le! Vui long nhap lai!\n";
  27. }
  28. } while (a <= 0 || b <= 0); // Nếu nhập sai, yêu cầu nhập lại
  29. }
  30.  
  31. // Hàm tìm Ước chung lớn nhất (UCLN) bằng thuật toán Euclid
  32. int ucln(int a, int b) {
  33. // Lặp cho đến khi phần dư bằng 0
  34. while (b != 0) {
  35. int r = a % b; // Lấy phần dư của a chia b
  36. a = b; // Gán lại a = b
  37. b = r; // Gán b = phần dư
  38. }
  39. return a; // Khi b = 0, a chính là UCLN
  40. }
  41.  
  42. // Công thức: BCNN(a, b) = (a * b) / UCLN(a, b)
  43. int bcnn(int a, int b) {
  44. return (a * b) / ucln(a, b);
  45. }
  46.  
  47. int ucln_nhi(int a, int b) {
  48. int g = ucln(a, b); // Gọi lại hàm UCLN để lấy ước lớn nhất
  49. int ucln2 = 1; // Biến lưu ước lớn nhì (ban đầu gán = 1)
  50.  
  51. // Duyệt ngược từ g/2 về 1 để tìm ước lớn thứ 2 của g
  52. for (int i = g / 2; i >= 1; i--) {
  53. if (g % i == 0) { // Nếu i là ước của g
  54. ucln2 = i; // Gán giá trị cho ucln2
  55. break; // Thoát khỏi vòng lặp ngay (vì i là ước lớn thứ 2)
  56. }
  57. }
  58. return ucln2; // Trả về ước chung lớn nhì
  59. }
  60.  
  61. void in_ket_qua(int a, int b) {
  62. cout << "Uoc chung lon nhat cua hai so " << a << " va " << b
  63. << " la " << ucln(a, b) << "\n";
  64. cout << "Boi chung nho nhat cua hai so " << a << " va " << b
  65. << " la " << bcnn(a, b) << "\n";
  66. cout << "Uoc chung lon nhi cua hai so " << a << " va " << b
  67. << " la " << ucln_nhi(a, b) << "\n";
  68. }
  69.  
Success #stdin #stdout 0.01s 5312KB
stdin
Standard input is empty
stdout
Nhap so dau tien : Nhap so thu hai : Uoc chung lon nhat cua hai so 1605482224 va 32767 la 1
Boi chung nho nhat cua hai so 1605482224 va 32767 la 2076592400
Uoc chung lon nhi cua hai so 1605482224 va 32767 la 1