Cho giá trị ban đầu của hai số nguyên dương X và Y. Tìm giá trị cuối cùng của X và Y, với các thay đổi như sau:
- bước1 - Nếu X = 0 và Y = 0 thì kết thúc, ngược lại đi bước2
- bước2 - Nếu X ≥ 2Y, gán X = X - 2Y, quay lại bước1, ngược lại bước3
- bước3 - Nếu Y ≥ 2X, gán Y = Y - 2X, quay lại bước1, ngược lại kết thúc.
Số X và Y nằm trong khoảng [0, 10¹⁸] nên có thể dùng cách brute force.
Ví dụ mã nguồn
#include<iostream> using namespace std; void alterNumber(long long x, long long y) { while (1) { if (x == 0 || y == 0) break; if (x >= 2 * y) x = x % (2 * y); else if (y >= 2 * x) y = y % (2 * x); else break; } cout << "X: " << x << "\n" << "Y: " << y; } int main() { long long x = 12, y = 5; alterNumber(x, y); } Kết quả
X: 0 Y: 1