CSES - Fibonacci Numbers | Số Fibonacci

Xem PDF

Điểm: 1500 Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Các số Fibonacci có thể được định nghĩa như sau:

  • \(F_0 = 0\)
  • \(F_1 = 1\)
  • \(F_n = F_{n−2} + F_{n−1}\)

Nhiệm vụ của bạn là tính giá trị của \(F_n\) với \(n\) được cho.

Input

  • Dòng đầu vào duy nhất có một số nguyên \(n\).

Output

  • In giá trị của \(F_n\) chia lấy dư cho \(10^9 + 7\).

Constraints

  • \(0 \le n \le 10^{18}\)

Example

Sample input

10

Sample output

55


Bình luận


  • -1
    tknhatbm    7:30 a.m. 28 Tháng 4, 2023

    sau 7749 năm nhân ma trận thì cuối cùng cũng được


    • -4
      doanngocgiahung2013    11:52 a.m. 25 Tháng 7, 2024

      ma trận kiểu c++ như này nè anh:

      #include <iostream>
      #include <vector>
      using namespace std;
      
      const int MOD = 1e9 + 7;
      
      vector<vector<long long>> multiplyMatrix(const vector<vector<long long>>& A, const vector<vector<long long>>& B) {
          vector<vector<long long>> C(2, vector<long long>(2));
          for (int i = 0; i < 2; ++i) {
              for (int j = 0; j < 2; ++j) {
                  C[i][j] = (A[i][0] * B[0][j] + A[i][1] * B[1][j]) % MOD;
              }
          }
          return C;
      }
      
      vector<vector<long long>> matrixPower(vector<vector<long long>> M, long long power) {
          vector<vector<long long>> result = {{1, 0}, {0, 1}}; // Ma trận đơn vị
          while (power > 0) {
              if (power % 2 == 1) {
                  result = multiplyMatrix(result, M);
              }
              M = multiplyMatrix(M, M);
              power /= 2;
          }
          return result;
      }
      
      long long fibonacci(long long n) {
          if (n == 0) return 0;
          if (n == 1) return 1;
      
          vector<vector<long long>> M = {{1, 1}, {1, 0}};
          vector<vector<long long>> result = matrixPower(M, n - 1);
      
          return result[0][0]; 
      }
      
      int main() {
          long long n;
          cin >> n;
          cout << fibonacci(n) << endl;
          return 0;
      }
      


      • -1
        phongduongLOL    11:31 a.m. 12 Tháng 11, 2023

        ma trận là cái j vậy


        • 0
          Haidepzai    9:59 p.m. 31 Tháng 7, 2024

          tôi

          biết


          • 2
            iq2000laday    9:31 a.m. 14 Tháng 11, 2023

            giống cái bảng có n hàng m cột thì gọi là ma trận đó mi :)))


          • 0
            tk22DoMinhVu    3:09 p.m. 2 Tháng 11, 2023

            🙁


            • 2
              flo    11:01 p.m. 7 Tháng 5, 2023

              Nhân ma trận dễ mà nhóc, cực kì ezzzz =))


              • 2
                tknhatbm    7:13 a.m. 8 Tháng 5, 2023

                No anh, mất thời gian tạo hàm với lại công thức mà :v


                • 1
                  xthabao1    10:55 p.m. 14 Tháng 8, 2023

                  mn dùng ngôn ngữ gì vậy


                  • 0
                    tknhatbm    9:21 a.m. 15 Tháng 8, 2023

                    Python


                    • 0
                      TDA    9:30 p.m. 20 Tháng 9, 2024 đã chỉnh sửa

                      .


                      • 1
                        xthabao1    9:23 a.m. 15 Tháng 8, 2023

                        tui chơi c++