Cześć,
mam do zrobienia zadanie, gdzie wiadomo, iż F0 = F1 = 1 oraz, że Fn = Fn-1 + Fn-2.
Wejście: dana jest jedna liczba naturalna n nie większa od 2dopotęgi31.
Wyjście: 4 ostatnie cyfry liczby Fn.
Zrobiłam to zadanie i otrzymuje poprawne wyniki, ale na uczelnianej sprawdzaczce nie przechodzi- część testu zaakceptowana, część oznaczona jako błąd, a kończy się przekroczenie limitu czasu. Jak mogę zoptymalizować swój kod? Rzeczywiście dla n=2147483648 chwilę trwa zanim wyrzuci wynik.
Próbowałam robić coś z tablicami, ale jestem początkująca i trochę się w tym gubię- sama nie wiem, czy to przyśpieszy działanie mojego kodu dla liczb unsigned long.
#include <iostream>
using namespace std;
void fib(unsigned long n)
{
unsigned long long a = 1, b = 1;
for (unsigned long i = 0; i < n; i++) {
b = a + b; //pod zmienną b przypisujemy wyraz następny czyli a+b
a = b - a;
}
cout << a % 10000;
}
int main()
{
unsigned long n;
cin >> n;
fib(n);
return 0;
}