fork download
  1. #include <iostream>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. const ll MOD = 1e9 + 7;
  6.  
  7. // Returns F(n)
  8. ll fib(ll n) {
  9. ll a = 0, b = 1, c, d;
  10. for (ll i = 63 - __builtin_clzll(n); i >= 0; --i) {
  11. // Double the index
  12. c = (a * ((2 * b % MOD - a + MOD) % MOD)) % MOD;
  13. d = (a * a % MOD + b * b % MOD) % MOD;
  14. if ((n >> i) & 1) {
  15. a = d;
  16. b = (c + d) % MOD;
  17. } else {
  18. a = c;
  19. b = d;
  20. }
  21. }
  22. return a;
  23. }
  24.  
  25. int main() {
  26. ll n;
  27. cin >> n;
  28. cout << fib(n) << endl;
  29. return 0;
  30. }
  31.  
Success #stdin #stdout 0.01s 5292KB
stdin
100000000
stdout
908460138