композиция числа, где число очень велико

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

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

0

Решение

«Переполнение» (вы на самом деле не называете это для беззнаковых, они оборачиваются) n-битных типов без знака сохранит значения только по модулю 2 ^ n, а не по модулю произвольного модуля (как они могут? Попробуйте воспроизвести шаги с помощью ручка и бумага). Поэтому вы должны убедиться, что ни одна операция не выходит за пределы вашего типа, чтобы поддерживать правильные результаты мод 100000007.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]