Fibonacci mod number c++

Fibonacci mod number c++

本文关键字:c++ number mod Fibonacci      更新时间:2023-10-16

我有以下问题:我应该用另一个给定的数来计算一个斐波那契数。我知道比萨诺时期,我正努力在这里实施它。这是代码:

#include <iostream>
#include <cstdlib>
long long get_fibonaccihuge(long long n, long long m) {
    long long period = 0;
    if (m % 2 == 0) {
        if(m / 2 > 1)
        period = 8 * (m / 2) + 4;
        else
        period = 3; 
    }
    else{
        if(((m + 1) / 2) > 1)
        period = 4 * ((m + 1) / 2);
        else
        period = 1;
    }
    long long final_period = n % period;

    long long array_fib[final_period];
    array_fib[0] = 1;
    array_fib[1] = 1;
    for (long long i = 2; i < final_period; ++i) {
        array_fib[i] = (array_fib[i-1] + array_fib[i-2]) % m;
    }
    return array_fib[final_period - 1];
}
int main() {
    long long n, m;
    std::cin >> n >> m;
    std::cout << get_fibonaccihuge(n, m) << 'n';
}

它适用于小型测试,但问题是它无法通过以下测试:

281621358815590 30524

我不知道为什么。关于算法的任何建议,我都参考了这个页面。当我建造它的时候。

我收到的错误是:错误的结果。

预期:11963我的结果:28651

除非你的任务是使用Pisano周期,否则我建议你使用一种更常见的已知方法来计算log2(n)步中的第n个Fibonacci数(通过计算2*2矩阵的幂:https://en.wikipedia.org/wiki/Fibonacci_number#Matrix_form)。

有两个原因:

  1. 这是一个更简单的算法,这意味着调试程序会更容易
  2. 对于你举的例子中提到的数字,它应该更快(log2(n)大约是50,m/2明显更高)