i w końcu jak napisałem "poprawny" kod, zobaczyłem, że tam w ostatniej linijce trzeba obliczyć resztę z dzielenia \(\displaystyle{ 81^{9345}}\) przez 75. I tu moje pytanie, czy zna ktoś algorytm, dzięki któremu można taką resztę znaleźć?542. Potęgowanie
Kod zadania: T_POTEGA
Oblicz:
Xn mod p
Wejście
t - Liczba testów
W oddzielnych liniach kolejne testy w formacie:
x n p,
gdzie x,n,p są liczbami całkowitymi takimi, że 1<=x<=100, 0<=n<=10000, 2<=p<=100.
Wyjście
W oddzielnych liniach dla każdego testu jedna liczba:
y
taka, że 0<=y<=p-1 i istnieje liczba całkowita m taka, że Xn = pm+y
[C++] spoj.pl: "Potęgowanie"
- Psycho
- Użytkownik
- Posty: 370
- Rejestracja: 23 gru 2008, o 09:37
- Płeć: Mężczyzna
- Lokalizacja: Przemyśl/Kraków
- Podziękował: 59 razy
- Pomógł: 68 razy
[C++] spoj.pl: "Potęgowanie"
Robiłem sobie to zadanie ():
- Psycho
- Użytkownik
- Posty: 370
- Rejestracja: 23 gru 2008, o 09:37
- Płeć: Mężczyzna
- Lokalizacja: Przemyśl/Kraków
- Podziękował: 59 razy
- Pomógł: 68 razy
[C++] spoj.pl: "Potęgowanie"
No to jest oczywiste, ale mogę np. potrzebować kilka razy zastosować kongruencje (w tym wypadku \(\displaystyle{ 6^{9345}}\) wciąż nie mieści się long double) dlatego szukam algorytmu . Heh, jak to pisałem to pomyślałem, że może nie jest to takie trudne
-
- Użytkownik
- Posty: 735
- Rejestracja: 7 lis 2005, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 2 razy
- Pomógł: 133 razy
[C++] spoj.pl: "Potęgowanie"
Nie podnoś do potęgi. Najłatwiejszy algorytm operuje po prostu na resztach z dzielenia i nie powoduje przekroczenia zakresu:
Kod: Zaznacz cały
int reszta = 1;
for(int i = 0; i < 9345; i++)
reszta = (reszta*6)%75;