exponentiation modular - în ring, sib sovietic
Cu privire la modul de a construi un număr de grad foarte mare de aritmetica modulară și nu a atârnat calculatorul, astăzi am să-ți spun.
Deci, prima matematică. Apoi, va exista un algoritm si cod în Python.
Vom lucra în ring - aceasta este o astfel de structură algebrică specială. Ea nu știe în mod necesar, principalul lucru de a utiliza o proprietate specială, dar mai întâi să vorbim despre notația: standard, în scris ca aceasta: $ 7 ^ 4 \ pmod $ - ceea ce înseamnă 7 în clasa a 4 modulo 13, adică 7 pentru a ridica 4 și de a găsi restul diviziunii de 13 ( aproximativ vorbind, atunci matematica mă poate certa). Și expresia $ 7 ^ 4 \ echiv 9 \ pmod $ este un mijloc 7 în gradul 4-lea este echivalent cu 9 modulo 13, de fapt, dacă vă construi 7 la gradul 4-lea și de a găsi un rest divizie la 13 vom primi 9, dar capabil să înregistreze orice număr de care este de a găsi un echilibru va da, de asemenea, 9, să zicem $ 7 ^ 4 \ echiv 100 \ pmod $ este de asemenea adevărat - așa cum am vedea format o clasă de numere echivalente - se va utiliza (l folosește RSA).
Pentru o notație mai concis:
$ 7 ^ 4 \ pmod $ vor fi notate folosind nedescrisă aici algebrică concepte "inel", stilul de genul: $ [7] $ ^ 4_, și să ne permitem să Brazen libertăți în loc să $ \ $ echivalent va utiliza $ = $.
Luați în considerare în primul rând algoritmul propus de exemplu, apoi în formă generală. Să presupunem că avem nevoie pentru a construi un număr de 7 grade. um. 45 modulo 5. Atunci a face acest lucru:
$$
[7] ^ _ = [7] _ * [7] ^ _ = [7] * _ [49] _ ^ = [7] _ * [4] ^ _
$$
Privind la formula de mai sus, putem ghici deja algoritmul)))) Ceea ce am făcut aici, și asta e doar o bucatica de o proprietate specificat mine a beneficiat. Să ne pas cu pas:
- În primul rând, am învățat un factor de multiplicare pentru a obține gradul chotnuyu - este posibil, suntem în „ring“
- Apoi a coborât nivelul prin creșterea numărului în caseta (de obicei, nu are nevoie de un număr mare)
- Mai mult, amintesc doar că în modul, avem un număr mare de numere echivalente, bine, găsit doar din numărul rezultat - 49 restul divizării cu 5 - este 4 (deoarece acestea sunt echivalente în ring). și vom continua să lucrăm cu el (deci nu am ieși din pătratul modulului, în acest caz 5)
Din păcate, exemplul nu este foarte bun, dar de scurtă (sa încheiat rapid, 1 gradul 11 este 1). și așa mai departe, în cele din urmă putem primi, de exemplu, o astfel de listă:
$$
[7] _ * [4] _ * [3] _ * [2] _ * [1] _ * [2] _
$$
În acest caz, ele sunt multiplică și după câte două fiecare multiplicare găsi reziduuri, de exemplu:
$ [7] _ * [4] _ = [3] _ $
Acum, descriere mai mult sau mai puțin generală a algoritmului:
- taie imediat expresia originală, de exemplu: $ [7] _ = [2] _ $
- Atinge chiar și gradul de eliminarea unui factor și adăugându-l la lista (atunci când este adăugată la lista de pe ventilator, puteți economisi până elemente și apoi în perechi pentru a multiplica, sau pentru a optimiza și atunci când adăugați un element să se uite dacă există deja unul acolo, pur și simplu a adăugat multiplica opțiunea existentă și scrie restul când împărțit de către unitatea - astfel, „lista“ nu va crește mai mult de un element și să nu devină o „listă“ în esență)
- Repetați elementul anterior numărul necesar de ori
- Inmultiti împreună elementele listei (efectiv, adică folosind proprietățile utilizate de mai sus), iar elementul restant din listă este multiplicată cu elementul primit „grad de reducere“ exploatare și obținerea rezultatului (nu uitați că el trebuie să fie împărțită într-un modul și răspuns - rest - desi nu neapărat - așa cum este echivalentul a)
Asta e, e timpul pentru a arăta un exemplu pe Python (care nu au înțeles descrierea de mai sus - codul de ajutor):
Puteți juca cu această caracteristică - este foarte rapid a spus, și din moment ce în Python în mod implicit, toate Big. încercați de a conduce cel mai mare număr de argumente în funcție, care vzbredut capul.
În Kriptousikah. pus în aplicare, de asemenea, această caracteristică - și am încercat tot posibilul pentru a închide un server - nu a funcționat.
Știind cât de mulți studenți în laboratoarele de către șeful de programare a rupt cu această procedură exponentiere în modulul, cred că acest material va fi util.