c++ - 如何找到大数的斐波那契和?
问题描述
我正在解决一个 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]
会导致溢出。
在此处阅读有关模运算的更多信息。
推荐阅读
- react-native - 通过 forwardRef 传递 useAnimatedGestureHandler
- firebase - 如何使用 Flutter 检查 Firebase 中是否存在值?
- node.js - 使用 Native 而不是 Mongoose 创建一个基本的 MongoDB 包装器
- javascript - 数字旁边的正则表达式替换
- android-jetpack-compose - LaunchedEffect 在配置更改时执行,即使 rememberUpdatedState 没有改变
- java - 未调用 POST 请求的 RestTemplate
- firebase - Firebase Cloud Functions 的 GCP 存储使用情况
- java - 在java中通过递归打印数组元素
- xslt - 将节点与命名空间匹配
- json - 如何在 JSON 模板中进行字符串替换?