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.
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.
Pierwszy wiersz wyjścia powinien zawierać obliczoną resztę ab mod c.
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 :