Hello Everyone. Finally I reached 1000 on Codeforces so I decided to post my first Blog. But rather than just talking I wanted to post something helpful for the community in my first blog hence I came up with something for you all(Specifically Newbie's because I am also one).For all the people rated more than me I would appreciate your support (pls don't say newbie opinions don't matter)
So a lot of the newbie don't know how to calculate the nth term of fibonacci series modulo 10^9 + 7 when n is very large like N<=10^18 because it require computation in logN time and also some basic modular Arithmetic so here I am sharing the code to calculate that U can use it as a snippet and make a file of it so that u can import it anytime.
Here it is
define mod 1e9+7
define ll long long
ll modAdd(ll a,ll b){ ll p = (a%mod + b%mod)%mod; return p; }
ll modSub(ll a,ll b){ ll p = (a%mod — b%mod)%mod; if(p<0) p+=mod; return p; }
ll modMul(ll a,ll b){ ll p = (a%mod * b%mod)%mod; return p; }
pair<ll, ll> fib (ll n) { if (n == 0) return {0, 1};
auto p = fib(n >> 1); ll c = modMul(p.first,modSub(modMul(2,p.second),p.first)); ll d = modAdd(modMul(p.first,p.first),modMul(p.second,p.second)); if (n & 1) return {d, modAdd(c,d)}; else return {c, d};
}
just call the fib function with N as parameter and it will return a pair of integers {Fn,Fn+1} and u can say fib(N).first to get the value.
If u want the explanation of the code pls comment below. And if you want to make my day special pls upvote this blog.