Zadanie : rsa-1b
Zadanie

Algorytm szyfrujący RSA wyznaczając kryptogram oblicza resztę z dzielenia potęgi o wykładniku całkowitym, czyli ab mod c.

Liczby a i b są na tyle duże, że obliczenie tej potęgi nie jest możliwe w żadnym standardowym typie języka programowania. Na szczęście wyznaczenie reszty nie wymaga znajomości wartości potęgi - można posłużyć się następującym wzorem:

x*y mod k = [(x mod k) * (y mod k)] mod k

Wynika z niego, że zamiast obliczać duży iloczyn możemy najpierw wyznaczyć reszty obu czynników x i y, następnie iloczyn tych reszt, który nie będzie większy niż k2 i ponownie resztę z tego iloczynu. Zatem jeśli wszystkie trzy liczby oraz k2 mieszczą się w standardowych typach języka, to wartość reszty obliczymy bez konieczności tworzenia własnej arytmetyki liczb.

Jeśli wartość k2 mieści się w standardowym typie całkowitym to posługując się typami języka możemy obliczyć resztę dla dowolnej wartości wykładnika zawartego w typie całkowitym.

Napisz program, który dla danych liczb całkowitych a, b i c wyznaczy resztę z dzielenia potęgi ab przez liczbę c.

Wejście

Pierwszy wiersz wejścia zawiera trzy liczby całkowite: a z zakresu 2..20, b z zakresu 2..109 oraz c z zakresu 2..108.

Wyjście

Pierwszy wiersz wyjścia powinien zawierać obliczoną resztę ab mod c.

Przykład

Dla danych podanych na wejściu:

9 833283747 33495628

Poprawną odpowiedzią jest wyjście:

2438781

Jeśli chcesz zobaczyć inny przykład odśwież tę stronę klawiszem F5

Opcje zadania:

Biblioteki         : iostream iomanip 
Limit czasu        : 0.1 s
Limit pamięci      : 32 MB
Słowa niedozwolone :