Rút gọn phân số về dạng tối giản: không có số nào (trừ 1) chia hết cả tử và mẫu.
Ví dụ: 24/4 = 6/1, 12/16 = 3/4.
Ví dụ 1: Dùng thuật toán Euclid (GCD)
#include <stdio.h>
int main() {
int x, y, mod, numerat, denomi, lessnumert, lessdenomi;
printf("Nhập phân số (tử/mẫu): ");
scanf("%d/%d", &x, &y);
numerat = x;
denomi = y;
if (y == 0) {
printf("Mẫu số không được bằng 0\n");
return 1;
}
// Tìm GCD bằng thuật toán Euclid
while (mod != 0) {
mod = x % y;
x = y;
y = mod;
}
// x giờ là GCD
lessnumert = numerat / x;
lessdenomi = denomi / x;
printf("Phân số tối giản: %d/%d\n", lessnumert, lessdenomi);
return 0;
}
Kết quả ví dụ 1
Nhập phân số: 12/24
Phân số tối giản: 1/2
Ví dụ 2: Tìm GCD bằng cách duyệt giảm dần
#include <stdio.h>
int main() {
int num1, num2, GCD;
printf("Nhập phân số (tử/mẫu): ");
scanf("%d/%d", &num1, &num2);
// GCD ban đầu là số nhỏ hơn
GCD = (num1 < num2) ? num1 : num2;
if (num1 == 0 || num2 == 0) {
printf("Phân số đơn giản: %s\n", num1 ? "Vô cùng" : "0");
return 0;
}
// Tìm ước chung lớn nhất
while (GCD > 1) {
if (num1 % GCD == 0 && num2 % GCD == 0)
break;
GCD--;
}
printf("Phân số tối giản: %d/%d\n", num1/GCD, num2/GCD);
return 0;
}
Kết quả ví dụ 2
Nhập phân số: 28/32
Phân số tối giản: 7/8