大家好,这很可能是我全脑的放屁,但是我希望有人可以看看以下描述如何设置滞后斐波那契的陈述:
看起来很简单(用于生成矩阵,然后是要解决的实际问题,这个link就有问题)。无论如何,这是我的实现及其对s(10)和s(100)的输出:
class lagged_fib
{
private:
typedef std::deque<int> seed_list;
seed_list seeds;
size_t k;
public:
lagged_fib()
{
k = 1;
}
int operator()()
{
if (k<56)
{
seeds.push_back(((100003 - 200003*k + 300007*k*k*k)%1000000) - 500000);
k++;
}
else
{
seeds.push_back(((seeds[31]+seeds[0]+1000000)%1000000) - 500000);
seeds.pop_front();
}
return seeds.back();
}
};
产生:
s(10) = -393027
s(100) = -422827
您会注意到s(10)符合预期(因此,算法的第一部分是正确的),但s(100)却并非如此。因此,希望有人能发现我哪里出了问题,这使我陷入困境。
谢谢
最佳答案
看起来您的代码中存在整数溢出。
尝试使用int64_t类型而不是int类型。
关于c++ - 欧拉#149项目的斐波那契滞后,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1885750/