c++ - 如何找到大数的斐波那契和?

标签 c++ c++11

这个问题在这里已经有了答案:





initialize array with stackoverflow error [duplicate]

(2 个回答)



Finding out nth fibonacci number for very large 'n'

(23 个回答)



Finding the fibonacci number of large number

(1 个回答)


1年前关闭。




我正在解决一个 CSES 问题,其中我必须找到第一个“n”斐波那契数的总和。编码:

#pragma GCC optimize("Ofast")
#include <iostream>
 
using namespace std;
 
int main()
{
    unsigned long long int n;
    scanf("%llu", &n);
    unsigned long long int seq[n];
    seq[0] = 0;
    seq[1] = 1;
    unsigned long long int mod = 1000000000 + 7;
    for (unsigned long long int i = 2; i < n + 1; i++) {
        seq[i] = (seq[i - 1] + seq[i - 2]) % mod;
    }
    cout << seq[n];
}
问题指定 n 的值可以达到 10^18,因此我使用了 unsigned long long int 初始化 n。该问题还指示给出模 7 的答案。该代码对于 n 最多 4 位的值可以正常工作,但是当 n 的值上升到 10^18 的上限时会中断。它给出 (0xC00000FD)错误并且不返回任何内容。请帮助我理解这里的问题以及如何处理它。任何其他建议也将不胜感激。

最佳答案

在进行模块化添加时,您需要将您的 mod 应用于您添加的每个值。
例如,(a + b) % c = (a % c + b % c) % c。
这意味着在您的代码中:

seq[i] = (seq[i - 1] % mod + seq[i - 2] % mod) % mod;
否则,添加 seq[i - 1]seq[i - 2]将导致溢出。
阅读有关模算术的更多信息 here .

关于c++ - 如何找到大数的斐波那契和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65389235/

相关文章:

c++ - win32 api中的RemoveDirectory()函数在删除子目录后不会删除父目录

c++ - 放大影响独立 IE 的嵌入式 IE

c++ - 为什么 C++ 中的静态 thread_local 对象构造了两次?

c++ - 如何从成对的初始化列表构造对象?

python - 修改静态变量是线程安全的吗?

c++ - 如何在不终止程序的情况下停止 std::thread 的运行

c++ - 包装迭代句柄以用于基于范围的 for 循环

c++ - 我必须在构造函数中初始化所有内容吗?

c++ - 从 Pixel Patch OpenCV 获取方向直方图

c++ - 完善的转运容器元素