Posted By: gekon (Love, peace and Coyot!) on 'CZscience'
Title:     Re: Eukliduv algoritmus
Date:      Thu Apr 17 12:05:55 1997

   <*** Graficky upravil room aide. Lumo ***>
   ------------------------------------------
   Tak me to chvili vrtalo hlavou a pak mi doslo, ze jde o naprosto trivialni 
problem.

   Budu psat obecne pro rovnici t*x = 1 mod n, kde promenna je t a x, n jsou 
zname konstanty. 

Jedna se o obycejne hledani inverzniho prvku k tride [x] v grupe 
zbytkovych trid modulo n. Z teorie grup vyplyva, ze reseni existuje pro kazde x
pouze v pripade, ze n je prvocislo. Jinak se obecne dost dobre neda urcit, pro 
ktera x reseni existuje a pro ktera ne (pak se totiz nejedna o grupu, ale 
jen o monoid a tudiz vsechny prvky nemaji inverzi), takze podminka, aby n bylo 

<*** Pro ktera x existuje inverzni prvek v monoidu Z_n, se da urcit celkem 
     snadno. Jsou to vsechna cisla x nesoudelna s n. Drobny doplnek Lumo ***>

prvocislo je prakticky nezbytna. Spocitame si Eukleidovym algoritmem NSD(n, x) 
a oznacme ho treba q. Bezoutova rovnost rika, ze existuji takova cela cisla a, 
b, ze plati: q = a*n + b*x. A nami hledane t je prave b. 

A ted jak se ty cisla a, b spocitaji:
Jedna se vlastne o eukleiduv algoritmus zdola nahoru.

Eukleiduv algoritmus pro NSD(n, x), n>x:

n     = k_1   * x       + r_1      r_1 < x
x     = k_2   * r_1     + r_2      r_2 < r_1
r_1   = k_2   * r_2     + r_3      r_3 < r_2
      .
      .
r_n-2 = k_n-1 * r_n-1   + r_n      r_n < r_n-1
r_n-1 = k_n   * r_n                deleni vyjde beze zbytku

A ted Bezoutova rovnost:
Zbytky r_n az r_1 postupne vyjadrime pomoci zbytku s nizsim indexem

q = r_n = r_n-2 - k_n-1*r_n-1 = (ted vyjadrime r_n-1 pomoci r_n-2 a r_n-3)
r_n-2 - k_n-1*(r_n-3 - k_n-2*r_n-2) = (upravime) r_n-2*(1 - k_n-1*k_n-2) - 
k_n-2*r_n-3 = ... = neco_1*n + neco_2*x.

A to neco_2 je hledane b (=t).

No, vypada to priserne, ale je to docela jednoduchy. Zkusim ukazat na 
priklade:

Zkusim spocitat to t, z rovnice t*29 = 1 mod 1189.
:))) Zacal jsem to tukat do kalkulacky a ono 1189=29*41. Takze reseni 
neexistuje.

Tak zkusim treba t*29 = 1 mod 571. NETVRDIM, ze 571 je prvocislo, ale pokud 
ne, tak mam stesti a vyjde to.

571 = 19 * 29 + 20
29  = 1  * 20 + 9
20  = 2  * 9  + 2
9   = 4  * 2  + 1
2   = 2  * 1  + 0

   Tedy NSD(571, 29) = 1. A ted Bezout:

1 = 9 - 4*2 = 9 - 4*(20 - 2*9) = (pozor, nesmime vycislit zavorku, ale musime 
ji roznasobit) = 9*(1 -4*-2) - 4*20 = 9*9 - 4*20 = 9*(29 - 1*20) - 4*20 = 9*29 
- 13*20 = 9*29 - 13*(571 - 19*29) = -13*571 + 256*29.

 Cili t=256.

UUUUF! Hodina je v haji. Snad ti to bude k uzitku. Nenech se odradit, je do 
docela jednoduchy a pro pocitac uplna malina. 
 
> Diky
> vecne nespokojeny rk
> -----------------------------------------------------------------------------
> Where do foxes give Good night?

            Gekon                             /-----
                                            /   0 0   
-------------------------------------------      '      ------------------- 
Never send to know for whom the bell talls.   =====  / Microsoft? 
It talls for thee...                          _____/   Just simply say NO! 

   <*** To byla pekna prednaska, rekl bych, diky! Room aide Lumo. ***>

Search the boards