所以我尝试创建一个简单的程序来计算第n个斐波那契数mod 10^9+7,使用带有F[0]=0和F[1]=1的doubling formula。这个程序似乎可以在我的电脑上使用编译器VS2010和CodeBlocks以及MinGW运行,但是在ideone上测试我的程序时,每次输入都会返回0。似乎在第一次迭代之后,F.find(n)实际上找到了不应该存在的元素。以下是我的代码(在VS2010中,我刚刚更改了包含)。
#include <bits/stdc++.h>
using namespace std;
std::map<unsigned long long,unsigned long long> F;
unsigned long long fib(unsigned long long n)
{
if(n==-1) return 0; // Shifting index by 1
if(n==0) return 1;
if(n==1) return 1;
if(F.find(n) != F.end()) return F[n]; // This seems to be the problem,
else
{
if(n%2==0) //
{
F[n/2-1] = fib(n/2-1)%1000000007;
F[n/2] = fib(n/2)%1000000007;
return F[n] = (F[n/2-1]*F[n/2-1]+F[n/2]*F[n/2])%1000000007;
}
else
{
F[n/2] = fib(n/2)%1000000007;
F[n/2+1] = fib(n/2+1)%1000000007;
return F[n] = (F[n/2]*(2*F[n/2+1]-F[n/2]))%1000000007;
}
}
}
int main() {
unsigned long long int broj;
cin >> broj; // input the number
cout << fib(broj-1) << endl;
return 0;
}https://stackoverflow.com/questions/50687175
复制相似问题