canuc80k1812·13/50

Lặp Hàm Tuyến Tính

Nộp bài trên LQDOJ

Bài 18 · Matrix Multiplication

Cho hàm . Bắt đầu từ và áp dụng đúng lần; hãy tính giá trị cuối cùng theo modulo .

Input

  • Một dòng chứa bốn số nguyên theo đúng thứ tự này.

Output

  • In lặp đúng lần tại , lấy modulo .

Constraints

  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): không có giới hạn bổ sung.

Example

Test 1

Input

2 5 4 3

Output

123

Giải thích: Bốn lần áp dụng hàm cho dãy , nên kết quả là .

Lời giải tóm tắt
  • Phân tích: Thêm một tọa độ hằng 1 để biến phép biến đổi affine thành phép biến đổi tuyến tính: [t,1]^T -> [[A,B],[0,1]][t,1]^T.
  • Thuật toán: Nâng ma trận 2×2 lên lũy thừa n, nhân với [x,1]^T và lấy tọa độ đầu.
  • Chứng minh tính đúng đắn: Một lần nhân tạo đúng [A·t+B,1]^T. Quy nạp theo số lần lặp cho thấy ma trận lũy thừa n tạo đúng giá trị sau n lần áp dụng; cách này đúng cả khi A=1 vì không dùng phép chia.
  • Độ phức tạp: Thời gian O(log n); bộ nhớ O(1).