fork download
  1. #include <iostream>
  2. #include <functional>
  3. using namespace std;
  4.  
  5. constexpr int kMaxM = 1000000 + 1;
  6.  
  7. int fib_1[6 * kMaxM];
  8. int fib_2[36 * kMaxM];
  9.  
  10. int main() {
  11. cin.tie(0);
  12. ios_base::sync_with_stdio(false);
  13.  
  14. function<int(int [], const int&)> get_period = [] (int fib[], const int& x) {
  15. fib[0] = 1;
  16. fib[1] = 1;
  17. int i = 2;
  18. do {
  19. fib[i] = (fib[i - 1] + fib[i - 2]);
  20. if (fib[i] >= x) {
  21. fib[i] -= x;
  22. }
  23. i += 1;
  24. } while (fib[i - 1] != 1 or fib[i - 2] != 1);
  25. return i - 2;
  26. };
  27.  
  28. int n, m;
  29. while (cin >> n >> m) {
  30. int period = get_period(fib_1, m);
  31. int period_of_period = get_period(fib_2, period);
  32. cout << fib_1[(fib_2[(n - 1) % period_of_period] - 1 + period) % period] << '\n';
  33. }
  34. return 0;
  35. }
Success #stdin #stdout 0s 167552KB
stdin
1 100
2 100
3 100
4 100
5 100
5 2
6 100
stdout
1
1
1
2
5
1
21