Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Diferente pentru problema/pinex intre reviziile 6 si 7
Diferente pentru
problema/pinex intre reviziile
#6 si
#7
Nu exista diferente intre titluri.
Diferente intre continut:
== include(page="template/taskheader" task_id="pinex") ==
Trebuie să răspundeţi la $M$ întrebări de tipul: Dându-se două numere naturale $A$ şi $B$, să se determine numărul de numere mai mici ca $A$ şi prime cu $B$. Două numere naturale $(x,y)$ sunt prime între daca $cmmdc(x,y)=1$.
h2. Enunţul principiului
Fiind date $N$ multimi finite $A{~1~},A{~2~},A{~3~}...A{~n~}$
h2. Aplicaţie
Răspundeţi la $M$ întrebări de tipul: Dându-se două numere naturale $A$ şi $B$, să se determine numărul de numere mai mici ca $A$ şi prime cu $B$. Două numere naturale $(x,y)$ sunt prime între daca $cmmdc(x,y)=1$.
h2. Date de intrare
* $1 ≤ M ≤ 500$
* $1 ≤ A ≤ 10^18^$
* $1 ≤ B ≤ 10^12^$
* Pentru 30% din teste $M ≤ 100, A,B ≤ 1 000$
* Pentru 70% din teste $A,B ≤ 10^9^$
h2. Exemplu
h2. Indicaţii de rezolvare
O primă soluţie are complexitate $O(M*A*log(A+B))$ şi ar obţine $30$ de puncte. În acest caz vom parcurge toate numerele din intervalul $[1,A]$, verificând pentru fiecare dacă are cmmdc-ul cu $B$ egal cu $1$. O sursă pe această idee se poate găsi 'aici':job_detail/372817?action=view-source.
Pentru o soluţie mai performantă trebuie implementat principiul includerii si excluderii, despre care puteţi citi pe 'wikipedia':http://en.wikipedia.org/wiki/Inclusion-exclusion_principle sau pe 'mathworld':http://mathworld.wolfram.com/Inclusion-ExclusionPrinciple.html. Concret, presupunând că trebuie să raspundem la query-ul $20 6$, o să ne intereseze numărul de numere divizibile cu $2$, numărul de numere divizibile cu $3$ şi numărul de numere divizibile cu $2 şi 3$ mai mici decât $20$. Numarul de numere divizibile cu $x$ mai mici decat $y$ va fi simplu $[y/x]$ (parte intreagă din $y/x$). Soluţia noastră va fi reprezentată de $A-Nr2-Nr3+Nr6$, unde $Nrx$ este numărul de numere divizibile cu $x$ mai mici decât $20$. Numărul de apariţii ale numerelor cu număr impar de factori primi se scad din soluţie, în timp ce pentru număr par de factori primi se adună. Tabelul de mai jos ilustrează cele spuse până acum, o casută $(p,q)$ fiind marcată dacă $p$ divide $q$.
!problema/pinex?tabel.JPG 100%!
'Această abordare':job_detail/372842?action=view-source are complexitate $O(T*NRMAXF*2^NRMAXF^)$ şi obţine $70$ de puncte. Prin $NRMAXF$ ne referim la numărul maxim de factori primi ce poate să îi aibă numărul $B$.
Pentru punctaj maxim trebuie să aducem îmbunatăţiri soluţiei precedente. În primul rând, atunci când determinăm factorii primi ai lui $B$, ne vom uita pana la $sqrt(B)$. Cum această valoare este mai mică decât $1 000 000$, putem precalcula numerele prime prin care vom itera la fiecare query. Altă optimizare utilă nu doar la această problemă este să precalculăm puterile lui $2$ pentru backtracking-ul care ne determina soluţia. O astfel de soluţie ce obţine $100$ de puncte se află 'aici':job_detail/372843?action=view-source.
h2. Aplicaţii
'Reuniune':problema/reuniune
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.