StartAlgorytmyAlgorytmy arytmetyczneNaiwne potęgowanie modularne
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Naiwne potęgowanie modularne
Ocena użytkowników:+++-- / 3
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
wtorek, 14 listopada 2006 00:02
Powiedzmy, że chcemy obliczyć wartość ab mod n. Jak to zrobić, gdy wartość ab przekracza wartość mogącą pomieścić się w zmiennej całkowitoliczbowej?
Po pierwsze jeżeli a ≥ n to wówczas najpierw obliczymy wartość a mod n a następnie dopiero ją będziemy podnosić do potęgi b. Jeżeli a jest bardzo duże możemy posłużyć się operacją modulo na dużych liczbach.
Dalej zakładamy, że wynik jest równy 1, a następnie mnożymy go b razy przez a, przy czym po każdym mnożeniu wynik dzielimy modulo n.
W pseudo kodzie całą operację potęgowania modulo można zapisać następująco:

result = 1;
a = a mod n;
for i=1 to b do
  begin
    result = result * a;
    result = result mod n;
  end;

Schemat blokowy przedstawionego algorytmu wygląda następująco:
schemat blokowy - naiwne potęgowanie modularne


Matematycznie wygląda to tak:
ab mod n = (...(((a mod n) * a mod n) * a mod n) ...* a mod n)

Przykład
Obliczmy 124 mod 7
A więc najpierw obliczymy 12 mod 7 = 5
Teraz wykonamy pierwsze mnożenie 1 * 5 = 5, wynik podzielimy modulo: 5 mod 7 = 5
Wynik z poprzedniego działania znów pomnożymy razy pięć. 5 * 5 = 25, wynik podzielimy modulo: 25 mod 7 = 4
Teraz wykonamy trzecie mnożenie 4 * 5 = 20, wynik podzielimy modulo: 20 mod 7 = 6
I w końcu czwarte mnożenie 6 * 5 = 30, wynik podzielimy modulo: 30 mod 7 = 2
Zatem ostateczny wynik to: 124 mod 7 = 2


Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński Ada
Implementacja w Ada
Implementacja w Ada
++++- / 1
Tomasz Lubiński C# MS Visual Studio .net
Implementacja w C#
Implementacja w C#
++++- / 1
Tomasz Lubiński C/C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 1
Marian C/C++ C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 1
Tomasz Lubiński Delphi/Pascal
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 1
Tomasz Lubiński Java
Implementacja w Java
Implementacja w Java
++++- / 1
_marass_ Php
Implementacja w Php
Implementacja w Php
++++- / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: środa, 26 maja 2010 22:31

Dodaj komentarz

Kod antysapmowy
Odśwież