【发布时间】:2016-08-09 01:56:00
【问题描述】:
我有以下问题: 我应该计算一个斐波那契数模另一个给定的数字。我知道 Pisano 时期,我正在尝试在这里实现它。这是代码:
#include <iostream>
#include <cstdlib>
long long get_fibonaccihuge(long long n, long long m) {
long long period = 0;
if (m % 2 == 0) {
if(m / 2 > 1)
period = 8 * (m / 2) + 4;
else
period = 3;
}
else{
if(((m + 1) / 2) > 1)
period = 4 * ((m + 1) / 2);
else
period = 1;
}
long long final_period = n % period;
long long array_fib[final_period];
array_fib[0] = 1;
array_fib[1] = 1;
for (long long i = 2; i < final_period; ++i) {
array_fib[i] = (array_fib[i-1] + array_fib[i-2]) % m;
}
return array_fib[final_period - 1];
}
int main() {
long long n, m;
std::cin >> n >> m;
std::cout << get_fibonaccihuge(n, m) << '\n';
}
它适用于小型测试,但问题是它无法通过以下测试:
281621358815590 30524
我不知道为什么。关于算法的任何建议,我都提到了this 页面。当我在构建它时。
我收到的错误是:错误的结果。
预期:11963 我的结果:28651
【问题讨论】:
-
long long array_fib[final_period]使用 g++ 语言扩展(即 C99 可变参数数组)。在标准 C++ 中使用std::vector<long long> array_fib(final_period)。这不是你的逻辑问题,但我想我应该提一下:更好的发布标准代码,每个人都可以尝试。 -
我知道错误应该是在我获取数字mod周期的那一刻,
-
什么失败了?运行时错误?结果错误?你的输出是什么?
-
你的结果是什么?预期的结果是什么?
-
建议将其添加到您的问题中。
标签: c++ algorithm fibonacci mod