Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int FiboM (int N, int M){
- if (N == 0) { return 0; };
- int prev = 0;
- int curr = 1;
- for (int i = 2; i <= N; ++i) {
- int temp = curr;
- curr += prev;
- prev = temp;
- }
- return curr % M;
- }
- int PeriodLen (int N, int M) {
- int pisano = 1, i = 0;
- while (1) {
- while (FiboM(i,M) != FiboM(i + pisano,M)) pisano++;
- if (FiboM(i + pisano, M) == FiboM(i + 2*pisano, M)) return pisano;
- i++;
- }
- }
- int main () {
- int N, M, i;
- cin >> N >> M;
- int* F = new int[N];
- int len;
- //for (i = 0; i < N; i++) F[i] = FiboM(i,M);
- len = PeriodLen(N, M);
- cout << len << '\n';
- int solution = FiboM(N % len, M);
- cout << solution;
- delete F;
- return 0;
- }
Add Comment
Please, Sign In to add comment