Fibonacci mod number c++
Fibonacci mod number c++
我有以下问题:我应该用另一个给定的数来计算一个斐波那契数。我知道比萨诺时期,我正努力在这里实施它。这是代码:
#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
我不知道为什么。关于算法的任何建议,我都参考了这个页面。当我建造它的时候。
我收到的错误是:错误的结果。
预期:11963我的结果:28651
除非你的任务是使用Pisano周期,否则我建议你使用一种更常见的已知方法来计算log2(n)步中的第n个Fibonacci数(通过计算2*2矩阵的幂:https://en.wikipedia.org/wiki/Fibonacci_number#Matrix_form)。
有两个原因:
- 这是一个更简单的算法,这意味着调试程序会更容易
- 对于你举的例子中提到的数字,它应该更快(log2(n)大约是50,m/2明显更高)
相关文章:
- 具有变量Number of Arguments的std::函数的矢量
- 什么"!<number> 在 C/C++ 中表示
- 找到$number,然后将其替换为$number+1
- Rcpp 'candidate function has different number of parameters (expected 0 but has 1)'
- 如果 i<=number-1,那么 i 的最大值应该是 number-1,那么 number%1==0 或 i==number 语句如何为真?
- 使用 Boost ASIO 和 SSL 时出现"Wrong Version Number"错误 (C++)
- QMutex with QThread - prime number sekeer
- 由于错误'wrong version number'无法完成握手
- 是否有与C++"-Wl,--stack,[a number, e.g. 4194304 for 4Mb of stack]"的 CUDA 等效性?
- C++相当于 Python '#'*number?
- 为什么在这种情况下使用 int *arr = new int [number]
- 是否有内置函数返回" the number of true value in a boolean vector "?
- 函数参考funcname @number, @x是什么意思
- 为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"
- 了解C++代码 - "Get the number of digits in an int"
- 从 learncpp.com 做基本运动,煎饼贪吃"the least number"的输出是不对的
- Complex number class
- 如何防止从函数生成的字符串中使用科学记数法"number to string"?
- Number of tuples
- 如何使值 = strtol (number.c_str(),NULL, number.size());工作