leminhkt

noname42 (the nth fibonacci number)

Apr 9th, 2020
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include<conio.h>
  3. #include<time.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8.  
  9. #define f first
  10. #define s second
  11. #define ll long long
  12. #define ld long double
  13. #define MOD 1000000007
  14. #define PI (2*acos(0))
  15. #define pll pair<ll, ll>
  16. #define pii pair<int, int>
  17. #define vi vector<int>
  18. #define vll vector<ll>
  19. #define vvi vector<vi>
  20. #define vvll vector<vll>
  21. #define pb push_back
  22.  
  23.  
  24. #define FOR(i, a, b) for(ll i = (a); i <= (b); i++)
  25. #define FORn(i, n) for(ll i = 1; i <= (n); i++)
  26. #define FORx(i, a, b, n) for(ll i = (a); i <= (b); i += (x))
  27. #define FORa(i, b) for(; i <= (b); i++)
  28. #define FORax(i, b, x) for(; i <= (b); i += (x))
  29. #define FORR(i, a, b) for(ll i = (a); i >= (b); i--)
  30. #define FORRn(i, n) for(ll i = (n); i >= 1; i--)
  31. #define FORRx(i, a, b, n) for(ll i = (a); i >= (b); i -= (x))
  32. #define FORRa(i, b) for(; i >= (b); i--)
  33. #define FORRax(i, b, x) for(; i >= (b); i -= (x))
  34.  
  35.  
  36. #define all(x) (x).begin(), (x).end()
  37. #define sz(x) (x).size()
  38. #define sqr(x) 1ll*(x)*(x)
  39.  
  40.  
  41. template <typename T>
  42. inline void Read(T& x) {
  43.     bool Neg = false;
  44.     char c;
  45.     for (c = getchar(); c < '0' || c > '9'; c = getchar())
  46.         if (c == '-') Neg = !Neg;
  47.     x = c - '0';
  48.     for (c = getchar(); c >= '0' && c <= '9'; c = getchar())
  49.         x = x * 10 + c - '0';
  50.     if (Neg) x = -x;
  51. }
  52. template <typename T>
  53. inline void Write(T x) {
  54.     if (x < 0)
  55.     {
  56.         putchar('-'); x = -x;
  57.     }
  58.     T p = 1;
  59.     for (T temp = x / 10; temp > 0; temp /= 10) p *= 10;
  60.     for (; p > 0; x %= p, p /= 10) putchar(x / p + '0');
  61. }
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.     /* ----------------- useful func ----------------- */
  70.     template <typename T> inline
  71.     void SieveOfEratosthenes(T n){
  72.         vector<T> prime(n + 1, true);
  73.         prime[0] = prime[1] = false;
  74.         for (int p = 2; p*p <= n; p++)
  75.             if (prime[p] == true)
  76.                 for (int i = p*p; i <= n; i += p)
  77.                     prime[i] = false;
  78.         for (int p = 2; p <= n; p++)
  79.             if (prime[p]){
  80.                 Write(p); putchar('\n');
  81.             }
  82.     }
  83.     template <typename T> inline
  84.     T power(T a, ll n){
  85.         if(n == 1) return a;
  86.         T t = power(a, n/2);
  87.         return (n & 1) ? t*t*a : t*t;
  88.     }
  89.     vvll operator * (vvll a, vvll b){
  90.         ll M = sz(a), N = sz(b), P = sz(b[0]);
  91.         vvll res(M, vll(N, 0));
  92.         FOR(i, 0, M - 1)
  93.             FOR(j, 0, P - 1)
  94.                 FOR(k, 0, N-1)
  95.                     res[i][j] = (res[i][j] + ((a[i][k]%MOD)*(b[k][j]%MOD))%MOD)%MOD;
  96.         return res;
  97.     }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. /* ----------------- ~~~~~~~~~~~ ----------------- */
  105.         /* ----------------- ~~~~~~~ ----------------- */
  106.     ll n;
  107.     vvll a = {{0, 1}, {1, 1}};
  108.     vvll f = {{1}, {1}};
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. /* ----------------- ~~~~~~~ ----------------- */
  116.  
  117. int main(){
  118.     //freopen("INPUT.inp", "r", stdin);
  119.     //freopen("OUTPUT.out", "w", stdout);
  120.     //ios_base::sync_with_stdio(0); cin.tie(0);
  121.  
  122.         /* ----------------- main func ----------------- */
  123.     Read(n);
  124.     if(n < 3) Write(1);
  125.     else Write((power(a, n-2)*f)[1][0]);
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135. /* ----------------- ~~~~~~~~~ ----------------- */
  136. }
Advertisement
Add Comment
Please, Sign In to add comment