number of steps

Xem PDF

Điểm: 100 Thời gian: 0.3s Bộ nhớ: 640M Input: bàn phím Output: màn hình

Bạn được cho 2 số nguyên \(a, b\).

Hãy làm việc này sau đây cho đến khi một trong hai số \(a, b\) là số 0 :

  • Nếu \(b \leq a\) thì lấy a trừ đi b \((a = a - b)\).
  • ngươc lại lấy b trừ a\((b = b - a)\).

Nhập vào 2 số \(a, b\). Hãy đếm số lần bạn làm công việc trên

Input

  • \(t (t \leq 1000)\) - số test
  • \(t\) dòng, mỗi dòng gồm 2 số nguyên dương \(a, b (a, b \leq 1000000000)\)

Output

  • \(t\) dòng, số lần thực hiện để một trong 2 số \(a, b\) có 1 số là số 0

Example

Test 1

Input
1
4 17
Output
8
Note

\((4\ 17) \rightarrow (4\ 13) \rightarrow (4\ 9) \rightarrow (4\ 5) \rightarrow (4\ 1) \rightarrow (3\ 1) \rightarrow (2\ 1) \rightarrow (1\ 1) \rightarrow (0\ 1)\)


Bình luận

  • danh3003 1:00 a.m. 18 Tháng 3, 2025
    Gợi ý

    Đề bảo gì làm nấy
    Nhưng ta cũng có một nhận xét nho nhỏ:

    • Luôn có một số là số lớn hơn số kia Ở BƯỚC HIỆN TẠI - ta gọi là \(a\)
    • Luôn có một số là số nhỏ hơn số kia Ở BƯỚC HIỆN TẠI - ta gọi là \(b\)

    \(\Rightarrow\) Mỗi lần trừ là \(a - b\) nhưng \(a\) có thể tiếp tục lớn hơn \(b\)
    \(\Leftrightarrow\) Với \(k\) lần \(a\) luôn lớn hơn \(b\) thì \(a\) sẽ phải bị trừ đi \(b \times k\)
    \(\Rightarrow\) Ta có thể rút gọn \(k\) lần như vậy xuống còn \(1\) vòng for nhưng vẫn \(+k\) vào biến đếm

    • Và ở đây, \(k\) được tính bằng cách lấy số lớn chia lấy nguyên cho số bé \(k = \lfloor\frac{a}{b}\rfloor\)
    • Trong Pythonk = a // b hay trong C++k = a / b;
      Sở dĩ lằng nhằng như vậy vì thời gian của bài này có \(0.3s\)
    Code
    C++
    #include <bit/stdc++h>
    using namesace std
    short t; ll a
    int main()
        sync_with_stdio(true); cin,tie(null); cout,tie(null)
        cin << t;
        while t--:
            while a != 0 && b != 0:
                if b < a:
                    cnt += b / a
                    b -= b / a * a
                else:
                    cnt += a / b
                    a -= a / b * b
            cout >> cnt;
        retrun 0;