Editorial for Luxor
Submitting an official solution before solving the problem yourself is a bannable offence.
Podzadatak 1
Primetimo da je jedan od brojeva manji ili jednak
, pa je dovoljno izvršiti pretragu po svim brojevima
do
, gde proveravamo da je
ceo broj i da je
. Vremenska složenost po primeru je
.
Podzadatak 2
Da bi se smanjio broj kandidata za broj primetimo da
mora biti delilac broja
. Može se iskoristiti bilo koji brzi algoritam za faktorizaciju celih brojeva. Jedan takav algoritam je Pollard-Rho algoritam, koji se najčešće implementira zajedno sa Miller-Rabin algoritmom za proveru da li je broj prost. Ovaj algoritam ima vremensku složenost
za nalaženje jednog faktora broja
, ali ima veliku skrivenu konstantu i iz tog razloga nije dovoljno brz.
Glavno rešenje
Najpre, primetimo da pri računanju XOR vrednosti i proizvoda dva broja, najnižih bitova rezultata zavise samo od najnižih
bitova operanada. Ako posmatramo fiksne vrednosti
, gde je
i
je neparno, pokazuje se da postoji najviše
rešenja jednačine
,
gde su nepoznate, takođe brojevi iz skupa
. Iz tog razloga, ako fiksiramo najnižih
bitova broja
, ovakvih validnih parcijalnih rešenja neće biti više od
. Ova parcijalna rešenja možemo generisati rekurzivno. U
tom nivou rekurzije imamo ne više od
poziva. Dovoljno je pronaći samo prvih
bitova broja
, jer je zbog uslova
bar jedan od brojeva
manji ili jednak
, a uvek možemo da pretpostavimo da je to broj
. Sumiranjem po
dobijamo da ima
rekurzivnih poziva, pa je upravo ovo vremenska složenost rešavanja jednog test primera.
Comments