Đ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
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ó
5 bình luận nữa