Sunteți pe pagina 1din 2

ONI 2002...

de la ONI 2002: noi

SOLUII i EXTINDERI

soluii

Despre dou PROBLEME

Mihai Ptracu
Acest articol se refer pe scurt la dou probleme propuse de autor la
Olimpiada Naional de Informatic 2002. Enunurile acestor probleme au fost
publicate n numrul 12/5 (mai 2002) al GInfo. Articolul aduce elemente de
noutate, prezentnd cte o extindere i o nou metod de rezolvare pentru
problemele Suma divizorilor i EQS.

Suma divizorilor

Dac folosim o metod cu timp de execuie logaritmic


pentru a calcula valoarea qk se observ c suma poate fi evaluat ntr-un timp cu ordinul de complexitate O(log2 N).
O astfel de metod pentru calculul valorilor qk este folosirea unei recurene similare cu cea de mai sus:
q2k+1 = q q2k
q2k = (qk)2.
Dei folosirea acestui algoritm cu ordinul de complexitate O(log2 N) era suficient pentru a obine punctajul maxim la concurs, se observ c algoritmul poate fi mbuntit pentru a rula ntr-un timp de ordinul O(log N) dac
mbinm cele dou recurene i calculm simultan qn i Sn:
q2k+1 = q q2k
S2k+1 = 1 + q S2k
q2k = (qk)2
S2k = Sk + qk (Sk - 1).
nainte de a ncheia discuia problemei, dorim s combatem o obiecie pe care am auzit-o referitor la problem,
i anume c unii concureni puteau s nu cunoasc unele
proprieti cum ar fi:
(A + B) mod C = ((A mod C) + (B mod C)) mod C.
Considerm c o astfel de obiecie este total nejustificat, avnd n vedere nivelul nalt de pregtire pe care ar tre-

GInfo 13/2 - februarie 2003

n [2] este exprimat opinia c rezolvarea problemei Suma


divizorilor de la ediia 2002 a Olimpiadei Naionale de Informatic necesit unele elemente de matematic superioar. Lund n considerare rezolvarea publicat n [1] nu putem dect s fim de acord. Aceast rezolvare se baza pe
existena inversului multiplicativ pentru orice numr nenul ntr-un corp de resturi modulo 9901 (care este un numr prim). Acest element de matematic ar trebui s fie accesibil elevilor de clasa a XII-a, ns nu i celor de clasa a
XI-a (problema a fost propus la clasele a XI-a i a XII-a).
Cnd a fost propus aceast problem, a fost luat n
vedere i o soluie accesibil elevilor de clasa a XI-a, care,
pe lng accesibilitate, mai are meritul c nu folosete faptul c 9901 este numr prim (astfel, problema este generalizat pentru numere care sunt resturi modulo numere
compuse).
Pentru a prezenta soluia alternativ a acestei probleme, s ne reamintim c determinarea sumei divizorilor numrului AB a fost redus la calculul sumei unei progresii
geometrice modulo 9901: Sn = (1 + q + q2 + ... + qn) mod
9901 (vezi [1]).
Aceast sum se poate calcula eficient dac observm
urmtoarea recuren (toate calculele se efectueaz modulo 9901):
S2k+1 = 1 + q + q2 + ... + q2k + q2k+1 =
= 1 + q (1 + q + q2 + ... + q2k) =
= 1 + q S2k.

S2k = 1 + q + q2 + ... + qk + qk+1 + ... + q2k =


= (1 + q + q2 + ... + qk) + qk (q + q2 + ... + qk) =
= Sk + qk (Sk - 1).

13

GInfo 13/2 - februarie 2003

soluii

bui s l aib participanii la faza naional a olimpiadei. n


primul rnd, astfel de proprieti sunt intuitive i se folosesc nc din clasa a V-a cnd se calculeaz ultima cifr a
rezultatului unor expresii. n al doilea rnd, calculul cu
resturi este destul de important n informatic (numere
pseudoaleatoare, permutri, hashing etc.), astfel nct orice
elev cu un interes deosebit pentru informatic (cum ar trebui s fie concurenii de la ONI) s l fi cunoscut i folosit.

14

EQS

Aa cum a fost propus, problema EQS cere numrarea


soluiilor dintr-un anumit domeniu de forma [-A, +A] a
unor ecuaii de tipul :
a1 x3 + a2 y3 + a3 z3 + a4 u3 + a5 v3 = 0.
Pe scurt, soluia consta n a trece dou dintre necunoscute n membrul drept al ecuaiei, schimbnd semnul pentru coeficieni. Se generau apoi toate valorile posibile pentru membrul cu dou necunoscute i se sortau. n continuare, se generau toate valorile posibile pentru membrul
cu trei necunoscute i se cutau logaritmic ntre valorile
posibile ale celuilalt membru al ecuaiei, folosind o cutare
binar. Aadar, se folosete o cantitate de memorie de ordinul O(A2) (pentru tabloul sortat) i este necesar un timp
de execuie de ordinul O(A3 log A) (factorul dominant
este cutarea n tabloul sortat).
Propunem n continuare o extensie a acestei probleme
pentru ecuaii cu ase necunoscute de forma:
a1 x3 + a2 y3 + a3 z3 + a4 u3 + a5 v3 + a6 v3 = 0.
Menionm c aceast extensie s-a aflat n vederea
comisiei de la ONI, dar nu a fost folosit n concurs,
rezolvarea fiind considerat destul de dificil.
ncercnd s folosim soluia de mai sus pentru aceast
nou problem, ne lovim de imposibilitatea de a pstra n
memorie toate valorile posibile ale unui membru cu trei
necunoscute.
Numrul acestor valori poate atinge 1003 = 1.000.000;
astfel, ar fi necesar o cantitate de memorie disponibil de
4MB, ceea ce nu a fost cazul la ONI 2002.
Intuim fr mare dificultate soluia: dac am putea s
generm toate valorile posibile ale unui membru cu trei
necunoscute n ordine cresctoare, am putea interclasa pur
i simplu listele de valori posibile pentru membrul stng i
membrul drept.
Algoritmul ar necesita un spaiu de memorie constant
i un timp de execuie constant n plus fa de codul de
generare a valorilor.
Ca urmare, subproblema care trebuie rezolvat const
n generarea n ordine cresctoare a elementelor urmtoarei mulimi:
S = {a x3 + b y3 + c z3 | x, y, z [-A, A]}.
n primul rnd se observ faptul c semnul coeficienilor nu conteaz, deci putem lucra numai cu coeficieni
pozitivi.

ntr-adevr, urmtoarea egalitate este valabil:


{a x3 + b y3 + c z3 | x, y, z [-A, A]} =
{|a| x3 + |b| y3 + |c| z3 | x, y, z [-A, A]}.
Egalitatea acestor mulimi se datoreaz faptului c, dac este luat n considerare un triplet de forma (x, y, z),
atunci vor fi luate n considerare toate tripletele de forma
(x, y, z). n cazul n care coeficienii sunt pozitivi,
exist o relaie de ordine parial foarte util ntre valorile
mulimii i anume:
z1 < z2 a x3 + b y3 + c z13 a x3 + b y3 + c z23.
Soluia pe care o propunem se bazeaz pe aceast relaie de ordine parial. Vom pstra un tablou bidimensional
t de dimensiuni 2 A 2 A n care vom pstra, pentru fiecare pereche (x, y), cea mai mic valoare z pentru care tripletul (x, y, z) nu a fost nc luat n considerare. Versiunea
n pseudocod a algoritmului este urmtoarea:
se iniializeaz tabloul t astfel nct tij = -A
ct timp exist elemente neutilizate ale mulimii execut
gsete o pereche (x, y) care minimizeaz valoarea expresiei ax3 + by3 + ctxy3
(*)
urmtorul element al mulimii este ax3 + by3 + ctxy3
txy txy + 1
sfrit ct timp
Ordinul de complexitate al operaiei de generare a
unui element este dictat de eficiena cu care putem efectua
operaia marcat cu (*) n algoritmul descris anterior. Pentru a executa eficient aceast operaie, vom menine un heap
n care vor fi pstrate toate perechile (x, y). Acest heap va
implementa o coad de prioriti, unde prioritatea unui
element (x, y) este, bineneles, chiar ax3 + by3 + ctxy3.
Perechea (x, y) "minim" va fi regsit n timp constant
(este chiar vrful heap-ului), iar pentru a menine structura
heap-ului va mai fi necesar un timp de ordinul O(log A2)
= O(2 log A) = O(log A), deoarece prioritatea perechii (x,
y) se schimb n momentul incrementrii valorii txy, deci
elementul va trebui "cernut" n heap.
n concluzie, algoritmul ruleaz n timp O(A3 log A),
i are nevoie de un spaiu de memorie de ordinul O(A2). n
mod suprinztor, aceste limite asimptotice sunt identice
cu cele pe care le atingea soluia mai puin performant n
cazul problemei "uoare" cu cinci necunoscute.

Bibliografie

1. Mihai Scoraru, Olimpiada Naional de Informatic,


GInfo 12/7 (noiembrie 2002), p. 8-13, Editura Agora
Media, Trgu Mure
2. Mihai Scoraru, Dup ONI 2002, GInfo 12/8 (decembrie 2002), p. 40-43, Editura Agora Media, Trgu Mure
Mihai Ptracu este student la Massaschussets Institute of Technology (MIT)
din Boston (Statele Unite ale Americii) i poate fi contactat prin e-mail la
adresa mip@mit.edu.

S-ar putea să vă placă și