zoukankan      html  css  js  c++  java
  • 斐波那契数列的第N项

     1 #include <bits/stdc++.h>
     2 #define _xx ios_base::sync_with_stdio(0);cin.tie(0);
     3 using namespace std;
     4 typedef long long ll;
     5 const ll p = 1000000009ll;
     6 struct node
     7 {
     8     ll data[2][2];
     9 };
    10 node operator * (const node& t1, const node& t2)
    11 {
    12     node ans;
    13     for(int i = 0; i < 2; i++)
    14     {
    15         for(int j = 0; j < 2; j++)
    16         {
    17             ans.data[i][j] = 0;
    18             for(int k = 0; k < 2; k++)
    19                 ans.data[i][j] += t1.data[i][k]*t2.data[k][j];
    20                 ans.data[i][j] %= p;
    21         }
    22     }
    23     return ans;
    24 }
    25 node operator % (const node& t1, const ll& p)
    26 {
    27     node ans;
    28     for(int i = 0; i < 2; i++)
    29         for(int j = 0; j < 2; j++)
    30             ans.data[i][j] = t1.data[i][j]%p;
    31     return ans;
    32 }
    33 node fastm(node a, ll b)
    34 {
    35     node ans;
    36     for(int i = 0; i < 2; i++)
    37         for(int j = 0; j < 2; j++)
    38             if(i == j) ans.data[i][j] = 1;
    39             else ans.data[i][j] = 0;
    40     while(b)
    41     {
    42         if(b%2 == 1)
    43         {
    44             ans = ans*a;
    45             ans = ans%p;
    46         }
    47         a = a*a;
    48         a = a%p;
    49         b /= 2;
    50     }
    51     return ans;
    52 }
    53 int main()
    54 {_xx
    55     ll n;
    56     cin >> n;
    57     if(n == 0) cout << 0 << endl;
    58     else if(n == 1) cout << 1 << endl;
    59     else
    60     {
    61         node a, b;
    62         for(int i = 0; i < 2; i++)
    63             for(int j = 0; j < 2; j++)
    64                 b.data[i][j] = a.data[i][j] = 0;
    65         a.data[1][0] = a.data[2][0] = 1;
    66         b.data[0][1] = b.data[1][0] = b.data[1][1] = 1;
    67         b = fastm(b, n - 1);
    68         a = b*a;
    69         cout << a.data[1][0]%p << endl;
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    树形dp入门
    D. Kilani and the Game(多源BFS)
    C. Ayoub and Lost Array
    poj3254(状压dp)
    CodeForces
    链式前项星(模板)
    “东信杯”广西大学第一届程序设计竞赛(同步赛)H
    最小生成树kruskal模板
    hdu-4763(kmp+拓展kmp)
    poj-3080(kmp+暴力枚举)
  • 原文地址:https://www.cnblogs.com/NWUACM/p/6640824.html
Copyright © 2011-2022 走看看