JuliaMelkozerova

Цикл Пизано

Oct 10th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int FiboM (int N, int M){
  6.     if (N == 0) { return 0; };
  7.     int prev = 0;
  8.     int curr = 1;
  9.  
  10.     for (int i = 2; i <= N; ++i) {
  11.         int temp = curr;
  12.         curr += prev;
  13.         prev = temp;
  14.     }
  15.     return curr % M;
  16. }
  17.  
  18. int PeriodLen (int N, int M) {
  19.     int pisano = 1, i = 0;
  20.     while (1) {
  21.         while (FiboM(i,M) != FiboM(i + pisano,M)) pisano++;
  22.         if (FiboM(i + pisano, M) == FiboM(i + 2*pisano, M)) return pisano;
  23.         i++;
  24.     }
  25. }
  26.  
  27. int main () {
  28.     int N, M, i;
  29.     cin >> N >> M;
  30.    
  31.     int* F = new int[N];
  32.     int len;
  33.    
  34.     //for (i = 0; i < N; i++) F[i] = FiboM(i,M);
  35.    
  36.     len = PeriodLen(N, M);
  37.     cout << len << '\n';
  38.    
  39.     int solution = FiboM(N % len, M);
  40.     cout << solution;
  41.    
  42.     delete F;
  43.     return 0;
  44. }
Add Comment
Please, Sign In to add comment