[英]composition of a number where a number is very large
我正在嘗試使用數字1和2計算一個數的合成方式數。這可以使用斐波那契數列找到,其中F(1)=1
和F(2)=2
並且
F(n)=F(n-1)+F(n-2)
由於F(n)可能非常大,所以我只需要F(n)%1000000007
。為了加快處理過程,我使用了fibonacci求冪方法。我針對同一問題編寫了兩個代碼(兩者幾乎相似)。但是其中一個大量失敗。我不知道哪一個是正確的?
CODE 1
CODE 2
雖然我有一種感覺,第一個應該是correct.I我不能數字會發生什么時,有當我們乘說這樣的情況下, a
和b
和價值的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
4294967295
1
無符號n位類型的“溢出”(您實際上並不稱其為無符號,它們會環繞)將僅保留模2 ^ n的值,而不保留任意模數的模數(它們怎么可能?筆和紙)。 因此,您必須確保沒有操作超出您的類型限制,以保持正確的結果mod 100000007。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.