数字非常大的数字的组成

时间:2013-02-03 14:47:34

标签: c++ fibonacci limits

我正在尝试使用数字1和2来计算数字composition的方式数。 这可以使用斐腾纳奇系列找到F(1)=1F(2)=2

F(n)=F(n-1)+F(n-2)

由于F(n)可能非常大,我只需要F(n)%1000000007。为了加快这个过程,我正在使用斐波纳契指数。我已经为同一个问题编写了两个代码(两者几乎相似)。但是他们失败了很多。我无法弄清楚哪一个是正确的?

CODE 1

http://ideone.com/iCPEyz

CODE 2

http://ideone.com/Un5p2S

虽然我有一种感觉,但首先应该是正确的。我无法想象当有一个例如我们乘以ab以及{{{{{ 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

1 个答案:

答案 0 :(得分:0)

“溢出”(你没有真正称它为无符号,它们包裹)无符号n位类型将仅保留模2 ^ n的值,不模数任意模数(他们怎么可能?尝试重现用笔和纸的步骤)。因此,您必须确保没有任何操作超过您的类型的限制,以保持正确的结果mod 100000007.