我有一个C++代码,它应该返回任何值m的Pisano周期值。 当期间为2位时,代码正常工作,但对于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;
}
当您计算下一个斐波那契数时,您需要:
long long tmp = prev2;
prev2 = cur2;
cur2 = tmp + prev2;
period = period + 1;
里面没有防止溢出的东西。 甚至long long
最终会溢出。 您应该尝试只保留prev2
和cur2
的模部分,以避免溢出。
我没有足够的数论知识来保证它会起作用,但它看起来是有道理的。