Forever Alone Person

Xem PDF

Điểm: 350 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Dù thông minh, đẹp trai, học giỏi nhưng vẫn không thoát khỏi kiếp FA vì chỉ có 8cm và lười tắm, Khánh 3508 lại buồn bã trở về vnoi code lại từ đầu. Trong một ngày chán như con gián, Khánh 3508 nhổ trộm bông hướng dương nhà hàng xóm và ngồi … đếm cánh hoa. Mỗi lần một cánh hoa rụng xuống là câu nói “Tắm”, “Không tắm” lại vang lên. Đã ba năm trôi qua Khánh 3508 vẫn chỉ ngồi đếm lá và chưa tắm rồi đột nhiên anh ta đứng lên và chạy về máy tính: “Đúng rồi số ngẫu nhiên!”. Hóa ra Khánh 3508 đã nghĩ ra cách làm mới mà không phải nhổ trộm hoa + ngồi đếm số cánh hoa. Chúng ta biết rằng số ngẫu nhiên được sinh ra bởi bộ ba số \(a, b, m\) theo quy tắc:

  • Số thứ nhất là \(x_1 =b \mod m\)
  • Số thứ \(k\)\((a*x_{k-1} +b) \mod m\) với \(k>1\)

Khánh 3508 sẽ lấy số \(x_k\) để so với lịch xem nó có phải ngày đẹp hay không để quyết định tắm rửa. Tuy nhiên do thích chơi trội Khánh 3508 đã để \(a, b, m, k\) rất lớn khiến máy tính bị đơ. Bạn hãy giúp Khánh tính \(x_k\) thật nhanh để cậu ta có thể tắm.

Input

  • Dòng 1: Số nguyên \(T (1\le T\le 10)\) là số lượng test
  • \(T\) dòng tiếp theo, mỗi dòng gồm 4 số nguyên \(a, b, m, k (1\le a, b, m, k\le 10^{15})\)

Output

  • Gồm \(T\) dòng, mỗi dòng in ra số \(x_k\) tương ứng.

Example

Test 1

Input
3
1 1 1 1
2 5 100 6
1 8 777 6
Output
0
15
48

Bình luận


  • 2
    jumptozero    8:09 p.m. 28 Tháng 2, 2021

    Mình xin chia sẻ lời giải bài này như sau:

    Đặt \(a'=a\text{ % } m\)\(b'=b\text{ % } m\)

    Khi đó ta có: \(x_k = x_{k-1}*a' +b'\)

    \(\implies \begin{pmatrix}x_{k-1}&1\end{pmatrix}.\begin{pmatrix}a'&0\\b'&1\end{pmatrix}=\begin{pmatrix}x_{k}&1\end{pmatrix}\)

    Đến đây sử dụng luỹ thừa nhị phân, bài toán được giải quyết, các bạn có thể tham khảo code tại đây

    • 3 bình luận nữa