Advertisement
TwITe

Untitled

Sep 8th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <cassert>
  3. #include <cstdint>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. class Fibonacci final {
  8. public:
  9.     static int get_remainder(int64_t n, int m) {
  10.         assert(n >= 1);
  11.         assert(m >= 2);
  12.         vector <unsigned long long> pisano;
  13.         int a = 0, b = 1;
  14.         pisano.push_back(0);
  15.         pisano.push_back(1);
  16.         for (int i = 2; i <= n; i++) {
  17.             unsigned long long current_fib_number_remainder = (a + b) % m;
  18.             a = b;
  19.             b = current_fib_number_remainder;
  20.             pisano.push_back(current_fib_number_remainder);
  21.             if (a == 0 && b == 1) {
  22.                 pisano.pop_back();
  23.                 pisano.pop_back();
  24.                 break;
  25.             }
  26.         }
  27.         return (unsigned long long)pisano[n % pisano.size()];
  28.     }
  29. };
  30.  
  31. int main() {
  32.     int64_t n;
  33.     int m;
  34.     std::cin >> n >> m;
  35.     std::cout << Fibonacci::get_remainder(n, m) << std::endl;
  36.     return 0;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement