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