Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #define mod 1000000007
- using namespace std;
- typedef long long ll;
- struct Matrix
- {
- ll a; ll b;
- ll c; ll d;
- };
- ll n;
- Matrix mnoz(Matrix A, Matrix B)
- {
- Matrix W;
- W.a = (A.a * B.a + A.b * B.c) % mod;
- W.b = (A.a * B.b + A.b * B.d) % mod;
- W.c = (A.c * B.a + A.d * B.c) % mod;
- W.d = (A.c * B.b + A.d * B.d) % mod;
- return W;
- }
- Matrix pot(Matrix A, ll n)
- {
- Matrix W = A;
- while(n > 0)
- {
- if(n % 2) W = mnoz(W, A);
- A = mnoz(A, A);
- n >>= 1;
- }
- return W;
- }
- Matrix A, W;
- int main()
- {
- scanf("%lld", &n);
- A.a = 0;
- A.b = 1;
- A.c = 1;
- A.d = 1;
- W = pot(A, n);
- printf("%lld", W.b);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement