27 kwietnia 2010
Szybki algorytm mnożenia dużych liczb (także w pamięci)

Dziś gratka dla miłośników szybkich obliczeń – prosto z Indii, metoda mnożenia liczb (także wielocyfrowych) znajdujących się w pobliżu tej samej wielokrotności liczby 10. Krótko mówiąc jeśli dwie liczby różnią się nieznacznie od jakiejś wielokrotności dziesiątki np. 28 i 26 dla 30 lub 104 i 98 dla 100, można bardzo szybko uzyskać dokładny wynik ich mnożenia. Przy odrobinie wprawy – w pamięci.


 

Placebo

Opisany algorytm nazywa się „Nikhilam Navatascaramam Dasata”, i stanowi część systemu algorytmów matematycznych o nazwie Vedic Math opracowanego na początku XX wieku przez hinduskiego matematyka Jagadguru Swami Bharati Krishna Tirthaji Maharaj. Zainteresowanych odsyłam do Wikipedii. Rzecz ciekawa, więc mam w planie jeszcze do niej w przyszłości powrócić. Tymczasem jednak zajmijmy się naszym algorytmem.

Prosty przykład na początek

Najprostszy sposób wytłumaczenia na czym polega prezentowana tu metoda mnożenia to posłużyć się przykładami wyjaśniając zasadę działania niejako po drodze. Tak więc…

  7
x 8

Najpierw należy odnaleźć odpowiednią „bazę”. Ponieważ cyfry 7 i 8 są obie blisko 10, jako bazę użyjemy właśnie dziesiątki. Obliczmy różnice:

baza 10
  7    |  -3
x 8    |  -2

Teraz trzeba przemnożyć różnice. Potrzebujemy tyle cyfr ile mamy zer w naszej bazie (w tym przypadku tylko jedną cyfrę bo w 10 jest jedno 0). Gdyby zabrakło cyfr należy przed wynikiem dopisać odpowiednią ilość zer (np. 04 lub -02). Tym razem jednak nie ma problemu, bo potrzebujemy tylko jednej cyfry. Pod spodem zapiszmy odpowiedź:

baza 10
  7    |  -3
x 8    |  -2
——————-
           6

Następnie należy dodać różnicę pomiędzy jedną z mnożonych liczb a 10, do drugiej z mnożonych liczb. Można zastosować dowolną kombinację, bo obie dają ten sam rezultat, tak jak na poniższym przykładzie:

8 + (-3) = 5 LUB 7 + (-2) = 5

Wynik (5) należy zapisać po lewej stronie:

baza 10
  7    |  -3
x 8    |  -2
——————-
  5    |   6

Wynik mnożenia widać jak na dłoni…

7 x 8 = 56

Tak na marginesie, to aby raz na zawsze zapamiętać ile to jest 7 razy 8 wystarczy zwrócić uwagę, że:

56 = 7 x 8 czyli 5678

Kto raz sobie to uświadomi, już nigdy się nie pomyli…

Mnożenie liczb dwucyfrowych i większych

To była rozgrzewka. Spróbujmy teraz z nieco większymi liczbami, aby pokazać na czym naprawdę polega siła tego algorytmu.

  98
x 89

Ponieważ obie liczby są bliskie 100, właśnie 100 wykorzystamy jako naszą bazę. Procedura jest ta sama. Po prawej stronie należy zapisać różnice pomiędzy mnożnymi i bazą. Ponieważ 100 ma dwa zera będziemy potrzebowali dwucyfrowego wyniku po prawej stronie.

baza 100
  98    |  -2
x 89    |  -11
——————-
  87    |   22

98 x 89 = 8722

Liczbę 87 uzyskać można dodając (-11) do 98 lub dodając (-2) do 89. 22 to rezultat mnożenia (-11) razy (-2). Rachunki nie są trudne i przy odrobinie wprawy można takie problemy rozwiązywać w pamięci.

Spróbujmy teraz rozwiązać problem wymagający dopisywania zer.

baza 100
  98    |  -2
x 97    |  -3
——————-
  95    |  06

98 x 97 = 9506

Liczba 95 uzyskuje się dodając (-3) do 98 lub (-2) do 97. (-2) razy (-3) daje 6. Ponieważ w 100 są dwa zera potrzebujemy dwóch cyfr po prawej stronie, a więc należy dopisać jedno zero – stąd 06.

W następnej kolejności problem dwóch liczb nieznacznie większych od wielokrotności 10:

baza 100
  105   |  +5
x 102   |  +2
——————-
  107   |  10

105 x 102 = 10710

Liczbę 107 uzyskuje się podobnie jak we wcześniejszych przykładach dodając 105 + 2 lub 102 + 5. Wartość 10 jest wynikiem mnożenia prawej strony: 5 razy 2.

Spróbujmy teraz rozwiązać problem, w którym mnożne znajdują się po dwóch różnych stronach wielokrotności liczby 10.

baza 100
  104   |  +4
x  98   |  -2
——————-
  102   | -08

Uwaga na ujemną wartość po prawej stronie! Aby sobie z tym poradzić należy do lewej strony dopisać odpowiednią ilość zer i dodać ujemną prawą stronę. Czyli:

10200 + (-08) = 10192

104 x 98 = 10192

Teraz spróbujmy jeszcze większych liczb:

baza 1000
  995   |  -5
x 998   |  -2
——————-
  993   | 010

995 x 998 = 993010

Liczbę 993 uzyskuje się dokładnie w ten sam sposób jak wcześniej 995 + (-2) lub 999 + (-5). Należy pamiętać o dodatkowym zerze, ze względu na trzy zera w bazie (1000).

Przedstawiana metoda działa z dowolnymi wielokrotnościami 10 (ale obliczenia mogą być bardziej kłopotliwe). Początek jest dokładnie taki sam:

baza 20 = 2 x 10
  18    |  -2
x 17    |  -3
——————-
  15    |   6

Tym razem to jeszcze nie koniec. Teraz należy przemnożyć lewą stronę przez ilość dziesiątek w zastosowanej bazie – w podanym przykładzie 2, czyli 15 x 2 = 30.

baza 20 = 2 x 10
  18    |  -2
x 17    |  -3
——————-
  30    |   6

18 x 17 = 306

Powodzenia w rachowaniu!

Poniższy tekst stanowi przekład z materiału autorstwa Rona Hale Evansa opublikowanego na stronie Mentat Wiki (na podstawie licencji CC-30-BY-SA) uzupełniony kilkoma komentarzami.


Artykuły o podobnej tematyce:




10 komentarzy »

  1. arathunku

    Kwiecień 27, 2010 @ 8:42 am (LINK DO KOMENTARZA)

    mistrzostwo, przyda się na matematykę. Muszę spróbować z bazą 550 np. ciekawe czy wyjdzie też.

  2. Rob

    Kwiecień 27, 2010 @ 10:37 am (LINK DO KOMENTARZA)

    Świetna notka. Dzięki! :)

  3. Barbara

    Kwiecień 27, 2010 @ 10:48 am (LINK DO KOMENTARZA)

    Chyba jednak szybciej będzie w „tradycyjny” sposób.
    Pozdrawiam

  4. Grzegorz

    Kwiecień 27, 2010 @ 12:23 pm (LINK DO KOMENTARZA)

    A co zrobić, gdy iloczyn różnic jest liczbą dwucyfrową przy jednocyfrowej bazie? Pozdrawiam, Grzegorz.

  5. Bartosz Zajaczkowski

    Kwiecień 27, 2010 @ 5:51 pm (LINK DO KOMENTARZA)

    @ARATHUNKU: Wyjść wyjdzie, ale raczej szkoda fatygi na takie kombinacje. Stosowanie powyższej metody ma sens tylko wtedy gdy ułatwia nam to rachunki, a więc tam gdzie obliczenia pośrednie nie są za bardzo skomplikowane. Przy bazie 550 czeka Cię po drodze „szybkie” mnożenie 55 np. razy 557 lub coś podobnego. Nie o to chodzi.

    @BARBARA: Są pewne kombinacje liczb, które dają się powyższą metodą przemnożyć naprawdę błyskawicznie. Jest też wiele kombinacji, przy których obliczenia stają się karkołomne. Kiedy mnoży się dwie liczby dwucyfrowe w sposób jak jesteśmy uczeni w szkole, wykonuje się cztery mnożenia i dodawanie. Kiedy mnoży się te same liczby w sposób opisany w artykule powyżej wykonuje się: dwa odejmowania/dodawania, mnożenie (różnic), dodawanie/odejmowanie i ewentualnie jeszcze mnożenie jeśli podstawa nie była 10, 100, 1000 itp. Większość ludzi dodaje i odejmuje szybciej niż mnoży, tu więc tkwi przewaga opisanego sposobu. Olbrzymią zaletą sposobu szkolnego jest to, że obliczenia pośrednie nigdy wykraczają poza tabliczkę mnożenia 10×10. W metodzie przedstawionej powyżej można mieć pecha i rachunki mogą się zrobić bardzo skomplikowane, np. tak jak w przykładzie Arathunku z bazą 550.
    Myślę, że jest to po prostu kwestia elastycznego podejścia oraz nabrania odrobiny praktyki. Wprawa pozwoli wyczuć jak będzie efektywniej: „tradycyjnie” czy „po indyjsku j.w.” i zastosować tę metodę, która w danej sytuacji będzie szybsza.

    @GRZEGORZ: Na przykład?

    Pozdrawiam!

  6. Patryk F.

    Kwiecień 28, 2010 @ 11:17 pm (LINK DO KOMENTARZA)

    A weźmy pod uwagę takie równanie, których to jedna liczba jest odległa od bazy znacznie bardziej od drugiej, np. 56 mnożymy przez 21

    baza 60 = 6*10
    56 | -4
    21 | -39

    102 156

    Postępujemy zgodnie z tym co jest napisane powyżej (tj. od lewej strony odejmujemy prawą „na krzyż”, otrzymamy 17. To mnożymy przez ilość wielokrotności 10, czyli 6 -> 17*6 = 102. Liczby z prawej kolumny mnożymy i otrzymamy 156, co dzięki sztuczce z postu „Szybkie liczenie, czyli tabliczka mnożenia po japońsku” nie jest trudne).
    Jak zrozumiałem z postu powyżej należałoby teraz uzyskane liczby połączyć ze sobą i uzyskujemy prawidłowy wynik, „na oko” już widać, że 102156 nie jest rezultatem działania tylko liczba 1176. Jednak gdy lewą stronę pomnoży się przez 10 i doda do tej sumy prawą stronę otrzymamy prawidłowy wynik! 1020 + 156 = 1176! I moje pytanie brzmi dlaczego?:) W poście co prawda jest napisane, że do lewej strony należy dopisać odpowiednią ilość zer, ale w przypadku, kiedy to wartość prawej strony ma wartość ujemną, (cyt.”Aby sobie z tym poradzić [tj. z ujemną wartością z prawej strony] należy do lewej strony dopisać odpowiednią ilość zer i dodać ujemną prawą stronę.”)ale tutaj mamy wartość dodatnią. Czyżby działał tu ten sam mechanizm, gdy po prawej stronie jest wartość ujemna?

  7. Bartosz Zajaczkowski

    Kwiecień 29, 2010 @ 9:48 pm (LINK DO KOMENTARZA)

    @PARTYK F.: Komplikacja o którą pytasz pojawia się wyłącznie w przypadkach kiedy wynik mnożenia po prawej stronie składa się z większej ilości cyfr niż baza (czyli przykładowy trzycyfrowy wynik przy dwucyfrowej bazie). Rowiązałem to sobie tak, że dopisuję zera z bazy do liczby po lewej po czym dodaję liczbę po prawej. To działa zawsze i robiąc tak nie można się pomylić. W podanym przez Ciebie przypadku do 102 dopisujesz jedno zero i do 1020 dodajesz 156.

    Na drugą część swojego pytania odpowiedziałeś sobie sam. Działa dokładnie ten sam mechanizm. Po prostu czasem dodaje się liczby ujemne a czasem dodatnie.

    Na koniec dodam jeszcze, że niepotrzebnie skomplikowałeś sobie obliczenia. Osobiście, mnożąc 56 i 21 zamiast 60 wybrałbym 20. Wtedy wyglądałoby to tak:

    baza 20 = 2 x 10
      56    |  36
    x 21    |  1
    ——————-
      57 x2 |  36
     114

    1140 + 36 = 1176

    Obliczenie 36 razy 1 oraz 57 razy 2 jest banalne, więc końcowy wynik 1176 uzyskuje się w zasadzie błyskawicznie. Dlatego warto się przez chwilę zastanowić nad wyborem właściwej bazy, przy czym generalnie im mniejsza tym lepiej (chyba że jest to 100 lub 1000). Reszta to tylko kwestia wprawy.

    Pozdrawiam!

  8. lolek

    Luty 11, 2011 @ 11:54 pm (LINK DO KOMENTARZA)

    a na mnożenie przez dziewięć przy tabliczce mnożenia do 100:

    x * 9 = (x-1)*10 + 10-x

    Czyli 7 * 9 to będzie 7 pomniejszone o 1 – cyfra dziesiątek, i do 10 brakuje 3 – cyfra jedności

  9. adams

    Październik 22, 2011 @ 7:54 pm (LINK DO KOMENTARZA)

    Dobre jest ta metoda :) tylko trzeba teraz trochę poćwiczyć żeby dojść do wprawy

  10. Adam Klimowski

    Listopad 16, 2011 @ 3:55 pm (LINK DO KOMENTARZA)

    http://www.adamklimowski.pl/matematyka-wedyjska.html – inne sposoby szybkiego liczenia rodem z matematyki wedyjskiej.



Dodaj swój komentarz

Dodając komentarz akceptujesz Politykę Prywatności.