Điểm:
100
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Cho hai số nguyên \(a, b\). Hãy tìm ước số chung lớn nhất của hai số \(a, b\).
Input
- Gồm một dòng ghi hai số nguyên \(a, b\) cách nhau bởi dấu cách \((|a|, |b|\leq 10^6)\).
Output
- Một số nguyên là ước số chung lớn nhất của hai số đã cho.
Example
Test 1
Input
8 12
Output
4
Bình luận
khó lắm
Gợi ý: sử dụng thuật toán Euclide mở rộng
Gọi a,b là 2 số cần tìm GCD, ta có:
Nếu a<b, đổi vị trí 2 giá trị (hay a=b, b=a) *có thể sử dụng lệnh swap(a,b) trong c++
Ta có biến nào đó làm trung gian (như biến r)
Trong khi a mod b khác 0, ta có:
1: Gán r=a mod b
2: Gán a=b
3: Gán b=r
Kết quả của bài toán sau khi kết thúc sẽ là b (nếu âm thì lấy giá trị tuyệt đối sử dụng hàm abs trong c++)
VD trong c++:
Cứ yên tâm, công thức này có thể duyệt 10^5 cặp 10^6 và vẫn không bị TLE
Có hàm __gcd(a,b) trong thư viện bits/stdc++.h để tìm GCD trong c++ nha ace, nhưng cần phải tính giá trị tuyệt đối của nó
khó quá
hàm gcd ko tính đc số âm
Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.