Я пытаюсь вычислить количество способов композиции числа, используя числа 1 и 2. Это можно найти, используя ряды Фибоначчи, где 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
, а значение 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