Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczby Fibonacciego - szybsze rozwiązanie

Ostatnio zmodyfikowano 2015-03-06 17:55
Autor Wiadomość
Malina94
Temat założony przez niniejszego użytkownika
Liczby Fibonacciego - szybsze rozwiązanie
» 2015-03-06 15:45:24
Mam za zadanie napisać program obliczający liczby fibonacciego. Niestety prosta rekurencja lub opisanie kodu w pętli to za mało, bo program wykonuje się za długo. Mogę skorzystać z tych zależności
F(2n) = F(n) (F(n) + 2 F(n - 1))
F(2n + 1) = F(n + 1)^2 + F(n)^2
plus dodatkowo część wartości trzymać w tablicy, ale nie bardzo wiem jak ich użyć. Czy ktoś mógłby mi podpowiedzieć jak je wykorzystać?
P-127814
pekfos
» 2015-03-06 15:51:55
Całkiem wyraźnie widać, że jedna zależność dotyczy obliczania liczby fibonacciego dla parzystego argumentu, a druga dla nieparzystego. Mając wybraną zależność możesz redukować duże liczby do mniejszych, których obliczenie jest szybsze. No i oczywiście możliwie dużo liczb buforuj w tablicy.
P-127816
Malina94
Temat założony przez niniejszego użytkownika
» 2015-03-06 16:11:09
Okej, dzięki :)
P-127818
Malina94
Temat założony przez niniejszego użytkownika
» 2015-03-06 17:23:28
Chodziło o coś takiego?
C/C++
cin >> n;

if( n % 2 == 0 ) {
    wynik =( f( n / 2 ) *( f( n / 2 ) + 2 * f( n / 2 - 1 ) ) ) % 70001;
}
else {
    wynik =( f( n / 2 + 1 ) * f( n / 2 + 1 ) + f( n / 2 ) * f( n / 2 ) ) % 70001;
}
cout << wynik << endl;
f(n) - funkcja obliczająca liczbę za pomocą pętli

Najgorsze jest to, że testy obejmują takie n: n < 10^4, 10^7 i 10^10. Dla n = 10^7 wynik jest niemal od razu, ale dla wyższych nadal trzeba sporo poczekać.
P-127823
aksen
» 2015-03-06 17:28:49
Pokaż kod f(n).
(a najlepiej kod całego programu)
P-127824
Malina94
Temat założony przez niniejszego użytkownika
» 2015-03-06 17:55:25
już ogarnęłam, zamykam
P-127826
« 1 »
  Strona 1 z 1