Diferente pentru happy-coding-2005-2/solutii intre reviziile #18 si #19

Nu exista diferente intre titluri.

Diferente intre continut:

* capatul stanga al intervalului curent este mai mic decat $X$, iar capatul dreapta al acestuia este mai mic sau egal cu $X$ => nu realizam nici o actiune si mergem mai departe
* capatul stanga al intervalului curent este mai mic decat $X$, iar capatul dreapta al acestuia este mai mare decat $X$ => adunam la $L$ diferenta dintre capatul dreapta al intervalului curent si $X$, iar apoi setam pe $X$ la valoarea capatului dreapta al intervalului curent.
Complexitatea solutiei este $O(N*logN + N)=O(N*logN)$.
 
h2. 'Resturi':problema/resturi
Vom calcula numarul cerut in mod incremental. La pasul $i$ vom avea calculat numarul $Q$, reprezentand cel mai mic numar care respecta primele $i$ relatii (deci $Q mod p{~j~}=r{~j~}$ pentru orice $j ≤ i$). La pasul $1$, $Q$ este egal chiar cu $r{~1~}$. Avand calculat numarul $Q$ la pasul $i$, va trebui sa determinam numarul $Q'$ la pasul $i+1$ care respecta primele $i+1$ relatii. Acest numar $Q'$ este de forma $Q + x*M$, cu $x ≥ 0$, unde $M$ este cel mai mic multiplu comun al numerelor $p{~1~},...,p{~i~}$ (fiind numere prime, $M$ este chiar produsul lor). Ideea din spatele acestei formule este ca la numarul $Q$ trebuie adunat un multiplu al numarului $M$, pentru ca numarul obtinut $Q'$ sa pastreze aceleasi resturi la impartirile la primele $i$ numere prime date. Avem acum urmatoarea ecuatie: $Q + x*M = r{~i+1~} (mod p{~i+1~})$. Trecand pe $Q$ in partea dreapta, obtinem o ecuatie de forma $A*x = B (mod P)$, care se poate rezolva direct, folosind algoritmul lui Euclid extins, pentru a calcula inversul multiplicativ al lui $A$, relativ la numarul prim $P$. O metoda mai simpla de rezolvare a ecuatiei se bazeaza pe a incerca toate valorile posibile pentru $x$, intre 0 si $p{~i+1~}-1$, care functioneaza deoarece valorile numerelor prime sunt relativ mici (mai mici decat $1000$).

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.