Points:
100
Time limit:
1.0s
Memory limit:
256M
Input:
stdin
Output:
stdout
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
Comments
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
This comment is hidden due to too much negative feedback. Click here to view it.