大家好,这很可能是我全脑的放屁,但是我希望有人可以看看以下描述如何设置滞后斐波那契的陈述:



看起来很简单(用于生成矩阵,然后是要解决的实际问题,这个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/

10-14 09:12