我正在尝试使用数字1和2来计算数字composition的方式数。
这可以使用斐腾纳奇系列找到F(1)=1
和F(2)=2
和
F(n)=F(n-1)+F(n-2)
由于F(n)可能非常大,我只需要F(n)%1000000007
。为了加快这个过程,我正在使用斐波纳契指数。我已经为同一个问题编写了两个代码(两者几乎相似)。但是他们失败了很多。我无法弄清楚哪一个是正确的?
CODE 1
CODE 2
虽然我有一种感觉,但首先应该是正确的。我无法想象当有一个例如我们乘以a
和b
以及{{{{{ 1}}已超出a
的上限,当我们将其乘以a
时,我对b
是否正确有多大肯定。据我所知,如果a*b
值高于其数据类型限制,那么该值将从最低值开始,如下例所示。
a
#include<iostream>
#include<limits.h>
using namespace std;
int main()
{
cout<<UINT_MAX<<endl;
cout<<UINT_MAX+2;
}
Output
答案 0 :(得分:0)
“溢出”(你没有真正称它为无符号,它们包裹)无符号n位类型将仅保留模2 ^ n的值,不模数任意模数(他们怎么可能?尝试重现用笔和纸的步骤)。因此,您必须确保没有任何操作超过您的类型的限制,以保持正确的结果mod 100000007.