Đề: "Cho 4 số nguyên dương phân biệt, trong đó tổng của 2 số bất kỳ sẽ chia hết cho a, và tổng 3 số bất kỳ sẽ chia hết cho b. Tính tổng nhỏ nhất của 4 số đó."
Hàm lcm() các bạn có thể tự biên chế hoặc dùng hàng có sẵn trong header <numeric>.
unsigned int
minsum(unsigned int a, unsigned int b)
{
unsigned int k = 1;
while ((2 * k) % a != 0 || (3 * k) % b != 0)
k++;
return (6 * lcm(a, b) + 4 * k);
}
Một bản khác không cần chạy k, hàm gcd cũng có trong header <numeric> hoặc cũng có thể tự chế:
unsigned int
minsum(unsigned int a, unsigned int b)
{
unsigned int k = lcm((a / gcd(a, 2)),
(b / gcd(b, 3)));
return (6 * lcm(a, b) + 4 * k);
}
Dùng cách này sẽ nhanh hơn cách trên khá nhiều.