Pisano周期发生器在3位数周期内表现不正确

时间:2020-06-09 12:32:36

标签: c++

我有一个C ++代码,应该为任何值m返回Pisano周期值。当句点为两位数时,该代码可以正常工作,但是对于3位句点,则生成错误的值。例如:-正确生成的Period(24)= 24 Period(25)= 1243(不正确,应为= 100)

#include <iostream>
using namespace std;

int main()
{
    long long m;
    cin >> m;
    long period = 1;
    long prev1 = 0;
    long cur1 = 1;
    long long prev2 = 0;
    long long cur2 = 1;
    while (1)
    {
        long long tmp = prev2;
        prev2 = cur2;
        cur2 = tmp + prev2;
        period = period + 1;
        if (((cur2 % m) == prev1) && (((cur2 + prev2) % m) == cur1))
        {
            break;
        }
    }
    cout << period;
}

1 个答案:

答案 0 :(得分:1)

计算下一个斐波那契数时,您可以执行以下操作:

    long long tmp = prev2;
    prev2 = cur2;
    cur2 = tmp + prev2;
    period = period + 1;

里面没有什么可以防止溢出的。甚至long long最终也会溢出。您应该尝试仅保留prev2cur2的模数部分,以避免溢出。

我没有足够的数论知识来保证您可以使用,但看起来似乎很合理。