Programarea pe mobil funcționează. Un laptop este mai rapid pentru sesiuni lungi.

Problema

Se citesc trei numere naturale x, n și m. Afișați valoarea lui x^n modulo m, calculată folosind o funcție recursivă ce exploatează relația de ridicare la putere prin înjumătățire (numărul de apeluri trebuie să fie de ordinul log2(n)).

Definiți o funcție recursivă putere(x, n, m) care întoarce (x^n) mod m, folosind relația:

putere(x, 0, m) = 1 mod m
putere(x, n, m) = (putere(x, n/2, m))^2 mod m,                 dacă n este par
putere(x, n, m) = ((putere(x, n/2, m))^2 * x) mod m,           dacă n este impar

Atenție: NU calculați x^n direct și apoi modulo (numerele intermediare pot fi enorme). Reduceți modulo m după fiecare înmulțire.

Format Date de intrare

Date de intrare input.txt

Programul citește de la tastatură, separate prin spațiu, trei numere naturale `x`, `n` și `m`. - `0 <= x <= 1.000.000` - `0 <= n <= 1.000.000.000` - `1 <= m <= 1.000.000.007` - Soluția trebuie să fie recursivă, cu adâncimea apelurilor de ordinul `log2(n)`.

Format Date de ieșire

Date de ieșire output.txt

Programul afișează un singur număr natural: `(x^n) mod m`, urmat de linie nouă.

Exemplu

intrare
2 10 1000000
rezultat
1024

Ești gata să rezolvi această provocare?

Creează un cont gratuit pentru a scrie cod, a trimite soluții și a-ți urmări progresul.

⌨️ Scurtături de tastatură

Editor de cod
Rulează codul
Ctrl Enter
Trimite codul
Ctrl Shift Enter
Formatează codul
Shift Alt F
Comută comentariul
Ctrl /
Anulează
Ctrl Z
Refă
Ctrl Y
Navigare
Căutare globală
/
Afișează scurtăturile
?
Închide fereastra
Esc

🔍 Depanator interactiv

0 / 0

Se analizează codul tău...

📦 Variabile

Nicio variabilă încă

📚 Stivă de apeluri
main() linia 1
📤 Rezultat