Problema a fost una interesanta admintand 3 solutii 2 greu de implementat si una inteligenta si scurta.
Matrici
RecurentaX[i] = 2 (102), i == 1 sau (X[i-1] * 2k+1 + 2k) % 666013 se poate transpune in inmultiri de matrici | 2k+1 1 0 | | Xk | | Xk+1| | 0 1 0 | x | 2k | = | 2k | | 0 0 1 | | 1 | | 1 |
Matematica
Se observa ca elementullX[i] este suma termenilor unei progresii geometrice cu ratia 2k+1 , se aplica formula pentru suma de termeni de progresie geometrica. Sum = b*(qn-1)/(q-1). Deoarece raspunsul trebuie afisat modulo 666013 vom folosi invers modular pentru impartire. Solutia Smen
Se identifica ciclurile si se preproceseaza Din cauza ca de laX[i] mergem la X[i] * 2k+1 + 2k se formeaza cicluri pe baza resturilor De exemplu pentru k = 1 se formeaza ciclu la i = 333006 de la valoarea 0, pentru k = 3 la i = 166503, pentru k = 13 tot la i = 333006 cu valoarea 0.
Acum ca sa calculam restul celui de al i-lea nr din X trebuie doar sa calculam restul lui i la perioada si sa afisam restul pentru acel numar.


