StartAlgorytmyAlgorytmy arytmetyczneOperacja modulo na dużych liczbach
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?
 
Operacja modulo na dużych liczbach
Ocena użytkowników:++++- / 10
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
poniedziałek, 13 listopada 2006 23:59
W niektórych przypadkach mamy potrzebę obliczenia wartości a mod n dla bardzo dużej liczby a. Tak dużej, że nie można jej przechowywać w zmiennej całkowitoliczbowej, a jedynie jako tekst. Nawet dla tak dużych liczb jesteśmy w stanie obliczyć wartość modulo. Tak wielką liczbę możemy podzielić na kilka mniejszych łańcuchów a następnie obliczać wartość modulo dla częsci od lewej do prawej strony, za każdym razem doklejając (łącząc łańcuchy) do kolejnej częsci wynik z poprzedniej. W ten sposób jesteśmy w stanie obliczyć wartość modulo dla praktycznie dowolnie dużej liczby wejściowej a. Algorytm zapisany w pseudokodzie wygląda następująco (założymy, że długość łańcuchów, na które dzielimy liczbę wejściową to 1), znak "+" oznacza tutaj łączenie łancuchów np: "1" + "2" = "12":

wynik = "";
for i=1 to length(a)
  begin
    wynik = wynik + a[i];
    wynik = wynik mod n;
  end;

Przykład
Obliczymy następującą wartość 1295302 mod 7
Bierzemy zatem pierwszą cyfrę z lewej i wykonujemy operacje modulo: 1 mod 7 = 1
Do wyniku z poprzedniego kroku dodajemy kolejną cyfrę (2) i dzielimy modulo: 12 mod 7 = 5
Dodajemy kolejną cyfrę (9) i znów dzielimy modulo: 59 mod 7 = 3
Do wyniku z poprzedniego kroku dodajemy kolejną cyfrę (5), wykonujemy kolejną operację modulo: 35 mod 7 = 0
Dodajemy kolejną cyfrę (3) i znów dzielimy modulo: 3 mod 7 = 3
Dodajemy kolejną cyfrę (0) i znów dzielimy modulo: 30 mod 7 = 2
Dodajemy kolejną cyfrę (2) i znów dzielimy modulo: 22 mod 7 = 1
Zatem ostateczny wynik to: 1295302 mod 7 = 1



Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński Ada
Implementacja w Ada
Implementacja w Ada
++++- / 2
Tomasz Lubiński C/C++
Implementacja w C/C++
Implementacja w C/C++
+++-- / 3
Marian C/C++ C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 3
Tomasz Lubiński Delphi/Pascal
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 2
Tomasz Lubiński Java
Implementacja w Java
Implementacja w Java
++++- / 2
 
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:30

Komentarze

 
photo
+1 # sajmondo 2010-02-23 15:28
Tytuł brzmi 'Operacja modulo na dużych liczbach', natomiast treść dotyczy tylko jednej wielkiej liczby

Co z przypadkiem np.: 12953043543643453453453454352 mod 7435346346455543534?
Jaki algorytm nadaje się do takiego działanie?

Pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
-3 # kotlet 2010-03-28 04:18
odejmowanie i sprawdzanie znaku
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież