Cho danh sách nums. Tìm ước chung lớn nhất (GCD) của tất cả các số trong danh sách.
Ví dụ: nums = [15, 81, 78] → kết quả 3 (3 chia hết 15, 81, 78).
Thuật toán giải quyết
- Nếu chỉ 1 phần tử: trả về phần tử đó
- Tính
div = gcd(nums[0], nums[1]) - Nếu chỉ 2 phần tử: trả về
div - Duyệt từ phần tử thứ 3:
div = gcd(div, nums[i]) - Nếu
div == 1: dừng sớm (UCLN = 1) - Trả về
div
Ví dụ minh họa
from math import gcd
def solve(nums):
if len(nums) == 1:
return nums[0]
div = gcd(nums[0], nums[1])
if len(nums) == 2:
return div
for i in range(1, len(nums) - 1):
div = gcd(div, nums[i + 1])
if div == 1:
return div
return div
nums = [15, 81, 78]
print(solve(nums))
Đầu vào
[15, 81, 78]
Đầu ra
3