Algoritmul, pas cu pas
Ce numere sunt speciale?
Un număr special are două cifre (10..99) cu pătrat de trei cifre, deci numărul e în 10..31. Verificând fiecare:
- 11→121: cifra zecilor 2=1+1 ✓;
- 22→484: cifra zecilor 8=4+4 ✓;
și niciun altul. Deci numerele speciale sunt {11,22}.
Cerința 1 — numărarea lui 11 și 22
Matricea are până la 1012 elemente — nu o construim. Pentru fiecare valoare țintă t∈{11,22} și fiecare linie i, numărăm coloanele j∈[0,M) cu
(15i+4j+2025)≡t(modK)⟺4j≡r(modK),r=(t−2025−15i)modK
Aceasta e o congruență liniară: are soluții doar dacă gcd(4,K)∣r; soluțiile sunt j≡j0(modK/gcd(4,K)), iar numărul lor în [0,M) se află prin împărțire. Total O(N).
Cerința 2 — întâlniri aproape speciale
Ioana ajunge la (i,j) la timpul i⋅M+j (parcurgere pe linii); Mihai la j⋅N+i (pe coloane). Se întâlnesc când timpurile coincid:
i⋅M+j=j⋅N+i⟺i(M−1)=j(N−1)
Enumerăm aceste celule: cu g=gcd(M−1,N−1), ele sunt i=gN−1⋅k, j=gM−1⋅k pentru k=0,1,… (cât timp i<N, j<M).
Un număr e aproape special dacă are cel puțin 3 cifre (ca să putem elimina cel puțin una și să rămână 11 sau 22) și conține de cel puțin două ori cifra 1 sau cifra 2.