Abd_Codeforce's blog

By Abd_Codeforce, history, 11 months ago, In English

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.

  • Vote: I like it
  • -26
  • Vote: I do not like it

»
11 months ago, # |
  Vote: I like it +28 Vote: I do not like it
if you are someone above newbie(Your upvote or comment of appreciation will really make me happy).
  • »
    »
    11 months ago, # ^ |
      Vote: I like it +13 Vote: I do not like it

    Hello Man. You are the first to comment on my blog. I really appreciate it.