canuc80k1800·1/50

Chỉ Số Fibonacci

Nộp bài trên LQDOJ

Bài 18 · Matrix Multiplication

Dãy Fibonacci (F_i) được đánh số từ và được xác định bởi . Với mọi , ta có .

Cho chỉ số , hãy tính theo modulo .

Input

  • Input gồm đúng một số nguyên - chỉ số cần tính.

Output

  • In theo modulo .

Constraints

  • .

Scoring

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

Example

Test 1

Input

10

Output

55

Giải thích: Từ và quy tắc cộng hai số liền trước, ta nhận được .

Lời giải tóm tắt
  • Phân tích: Trạng thái hai chiều [F_(i+1), F_i]^T được nhân với ma trận [[1,1],[1,0]] sau mỗi bước.
  • Thuật toán: Nâng ma trận chuyển lên lũy thừa n bằng bình phương liên tiếp; phần tử hàng 1 cột 2 là F_n.
  • Chứng minh tính đúng đắn: Mỗi phép nhân bảo toàn đúng truy hồi Fibonacci. Quy nạp theo số bước cho thấy lũy thừa thứ n đưa vector cơ sở tới [F_(n+1),F_n], nên phần tử được in là đáp án.
  • Độ phức tạp: Thời gian O(log n); bộ nhớ O(1).