Biderketarekiko alderantzizko modular

Biderketarekiko alderantzizko modularra aritmetika modularrareko eragiketa bat da. n {\displaystyle n} zenbaki oso baten biderketarekiko alderantzizkoa modulu p {\displaystyle p} beste m {\displaystyle m} zenbaki oso bat da non:

m n 1 ( mod p ) , {\displaystyle m\,n\equiv 1{\pmod {p}},}

hau da, m n {\displaystyle mn} biderketa 1-arekin kongruentea den (modulu p {\displaystyle p} ). m {\displaystyle m} zenbakia n {\displaystyle n} zenbakiaren alderantzizkoa modulu p {\displaystyle p} dela horrela adierazten da:

n 1 m ( mod p ) . {\displaystyle n^{-1}\equiv m{\pmod {p}}.}

Biderketarekiko alderantzizko modularra ez da beti existitzen. n {\displaystyle n} -ren alderantzizko modularra existitzen da baldin eta soilik baldin n {\displaystyle n} eta p {\displaystyle p} elkarrekiko lehenak badira, hau da, z k h ( n , p ) = 1 {\displaystyle zkh(n,p)=1} bada.

n {\displaystyle n} zenbakiaren alderantzizkoa modulu n {\displaystyle n} existitzen denean, orduan beste zenbaki bat n {\displaystyle n} balioaz zatitzearen eragiketa (modulu p {\displaystyle p} ) defini daiteke; zenbaki bat n {\displaystyle n} balioaz zatitzea n 1 {\displaystyle n^{-1}} alderantzizko modularraz biderkatzea da. p {\displaystyle p} zenbaki lehena bada, orduan zenbaki guztiak dira alderantzikagarriak, 0 {\displaystyle 0} -a izan ezik.


Azalpena

Biderketaren alderantzizko modularra ez da bakarra. Normalean, n {\displaystyle n} -ren alderantzizkotzat (modulu p {\displaystyle p} ) hartzen den m {\displaystyle m} zenbakia aukera guztien artean txikiena den zenbaki arrunta izaten da.

Adibidea:

Demagun n = 3 {\displaystyle n=3} zenbakiaren alderantzizkoa modulu p = 11 {\displaystyle p=11} kalkulatu nahi dela,

m 3 1 ( mod 11 ) {\displaystyle m\equiv 3^{-1}{\pmod {11}}} .

m n 1 ( mod p ) {\displaystyle mn\equiv 1{\pmod {p}}} betetzen duen m {\displaystyle m} zenbakia aurkitu nahi da, hau da,

3 1 3 1 ( mod 11 ) {\displaystyle 3^{-1}\cdot 3\equiv 1{\pmod {11}}}

beteko duena. Kongruentzia hori betetzen duen zenbaki arrunt txikiena 4 {\displaystyle 4} da ( Z 11 {\displaystyle \mathbb {Z} _{11}} partizioko balioa da). Horrela egiazta daiteke:

4 = 3 1 ( mod 11 ) 4 3 1 ( mod 11 ) 12 1 ( mod 11 ) {\displaystyle 4=3^{-1}{\pmod {11}}\quad \rightarrow \quad 4\cdot 3\equiv 1{\pmod {11}}\quad \rightarrow \quad 12\equiv 1{\pmod {11}}}

Esan bezala, m = 4 {\displaystyle m=4} ez da aukera bakarra, 4 {\displaystyle 4} -ri 11 {\displaystyle 11} -ren multiploak gehituz, hau da, 4 + ( 11 z ) ,   z Z , {\displaystyle 4+(11\cdot z),\ z\in \mathbb {Z} ,} beste 3 1 ( mod 11 ) {\displaystyle 3^{-1}{\pmod {11}}} balio posibleak lor daitezke. Horrela, {..., −18, −7, 15, 26, ...} multzoko balio guztietarako m 3 1 ( mod 11 ) {\displaystyle m\cdot 3\equiv 1{\pmod {11}}} betetzen da.


Kalkuluak

Euklidesen Algoritmo Hedatua

Euklidesen algoritmo hedatua erabiliz n {\displaystyle n} -ren biderketarekiko alderantzikoa modulu p {\displaystyle p} kalkula daiteke.

Esan dugunez, n {\displaystyle n} -ren alderantzikoa modulu p {\displaystyle p}

x n 1 ( mod p ) {\displaystyle xn\equiv 1{\pmod {p}}}

betetzen duen x {\displaystyle x} zenbaki osoa da, p | x n 1 {\displaystyle p|xn-1} betetzen da, hau da, p {\displaystyle p} balioak x n 1 {\displaystyle xn-1} zatitzen du. Hortaz,

k Z {\displaystyle \exists k\in \mathbb {Z} \quad } non x n 1 = k p . {\displaystyle \quad xn-1=kp.\,}

Beste era batean idatzita:

x n k p = 1. {\displaystyle xn-kp=1.\,}

Euklidesen algoritmo hedatuak ebazten duen problema, hain zuzen ere, hori da. n {\displaystyle n} eta p {\displaystyle p} zenbaki osoak izanik, z k h ( n , p ) {\displaystyle zkh(n,p)} zatitzaile komunetako handiena eta

x n + y p = z k h ( n , p ) {\displaystyle xn+yp=zkh(n,p)}

berdintza betetzen duten x {\displaystyle x} eta y {\displaystyle y} zenbaki osoak kalkula daitezke. Kasu honetan z k h ( n , p ) = 1 {\displaystyle zkh(n,p)=1} aurrez ezarrita dator. Baldin z k h ( n , p ) 1 {\displaystyle zkh(n,p)\neq 1} bada, orduan n {\displaystyle n} -ren alderantzikoa modulu p {\displaystyle p} ez da existitzen.

| n | < p {\displaystyle |n|<p} bada, algoritmoa O ( l o g ( p ) 2 ) {\displaystyle O(log(p)^{2})} denboran exekutatuko da.

Adibidea

n = 117 {\displaystyle n=117} eta p = 244 {\displaystyle p=244} izanik, 117 {\displaystyle 117} -ren alderantzizkoa modulu 244 {\displaystyle 244} horrela kalkulatzen da. Hasteko, existitzen dela egiaztatu behar da, hau da, z k h ( n , p ) = 1 {\displaystyle zkh(n,p)=1} dela. Horretarako, Euklidesen algoritmoa aplikatuko dugu. Ondoren, z k h ( n , p ) {\displaystyle zkh(n,p)} kalkulatzeko egindako eragiketetatik n 1 {\displaystyle n^{-1}} lortuko dugu:

  1. | n | < p {\displaystyle |n|<p} denez, p = q n + r {\displaystyle p=qn+r} idatz daiteke. Hau da, 244 = 2 117 + 10 {\displaystyle 244=2\cdot 117+10} . Hondarra askatuz: 10 = 224 2 117 {\displaystyle 10=224-2\cdot 117}
  2. 117 > 10 {\displaystyle 117>10} denez, 117 = 11 10 + 7 {\displaystyle 117=11\cdot 10+7} . Hondarra askatuz: 7 = 117 11 10 {\displaystyle 7=117-11\cdot 10}
  3. 10 > 7 {\displaystyle 10>7} denez, 10 = 1 7 + 3 {\displaystyle 10=1\cdot 7+3} . Hondarra askatuz: 3 = 10 1 7 {\displaystyle 3=10-1\cdot 7}
  4. 7 > 3 {\displaystyle 7>3} denez, 7 = 2 3 + 1 {\displaystyle 7=2\cdot 3+1} . Hondarra askatuz: 1 = 7 2 3 {\displaystyle 1=7-2\cdot 3}
  5. 3 > 1 {\displaystyle 3>1} denez, 3 = 1 3 + 0 {\displaystyle 3=1\cdot 3+0} . Hortaz, z k h ( 244 , 117 ) = 1 {\displaystyle zkh(244,117)=1} betetzen denez, 244 {\displaystyle 244} eta 117 {\displaystyle 117} elkarrekiko lehenak dira eta ondorioz, bilatzen dugun alderantzizko modularra existitzen da.
  6. Koefizienteen kalkulurako abiapuntua 4. urratseko 1 = 7 2 3 {\displaystyle 1=7-2\cdot 3} adierazpena da. Ondorengo urratsetan aurreko urratsetako hondarren adierazpenak ordezkatu behar dira.
  7. 3. urratseko hondarra 6. urratseko ekuazioan txertatuz: 1 = 7 2 ( 10 1 7 ) {\displaystyle 1=7-2\cdot (10-1\cdot 7)} , hau da, 1 = 2 10 + 3 7 {\displaystyle 1=2\cdot 10+3\cdot 7} .
  8. 2. urratseko hondarra 7. urratseko ekuazioan txertatuz: 1 = 2 10 + 3 ( 117 11 10 ) {\displaystyle 1=2\cdot 10+3\cdot (117-11\cdot 10)} , hau da, 1 = 3 117 35 10 {\displaystyle 1=3\cdot 117-35\cdot 10} .
  9. 1. urratseko hondarra 8. urratseko ekuazioan txertatuz: 1 = 3 117 35 ( 244 2 117 ) {\displaystyle 1=3\cdot 117-35\cdot (244-2\cdot 117)} , hau da, 1 = 35 244 + 73 117 {\displaystyle 1=35\cdot 244+73\cdot 117} . Esan dezakegu n 1 = 73 {\displaystyle n^{-1}=73} dela, 1 = x n + k p {\displaystyle 1=x\cdot n+k\cdot p} ekuazioa kontuan hartuz.
  10. n 1 {\displaystyle n^{-1}} negatiboa bada, n 1 {\displaystyle n^{-1}} -en alderantzizkoa n 1 + p {\displaystyle n^{-1}+p} izango da.


Erabilerak

Biderketarekiko alderantzizko modularrak erabilera ugari ditu algoritmoetan, zenbaki teoria-rekin erlazioa dutenetan bereziki, algoritmo horietako askoren oinarrian aritmetika modularraren teoria dagoelako.

Makina askok ez daukate zatiketa eragiketa egiteko hardware berezirik eta ondorioz, zatiketaren eragiketa biderketarena baino motelago exekutatzen da. Alderantzizko modularraren erabilerarekin kalkuluak azkarrago egitea lortzen da.

Inplementazioak

Inplementazioa C-n

//Calculador de inversos modulares (CIM), Arget-ek sortua
//Biderketarekiko alderantzizko modularraren kalkulua.
//Erabilera: cim a m
//(cim) programak (a * b)(mod m) = 1 betetzen duen b aurkituko du.
//Exekutatzean ez bada emaitzik itzultzen, ‘a’ balioak ez du alderantzizkorik modulu ‘m’.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    if(argc == 1)exit(-1);

    int b, // (a * b)(mod m)-n esprezioko b balioa gordeko da
        x, //eragiketaren emaitza gordeko da
        a = atoi(argv[1]), //a gorde
        m = atoi(argv[2]); //m gorde

    for(b = 0; b < m; b++)
    {
        x = (a * b) % m;
        if(x == 1)
            printf("%i", b);
    }
    return 0;
}

Inplementazioa Java-n

    //JLCY-k sortua,  (17-1-2016) 
    // Bezout-en lema aplikatuz
    //zkh(z,p) lortzen da euklidesen algoritmoa erabiliz
    //zkh(a,p)=1 bada, "a" eta "p" elkarrekiko lehenak dira; "a"-ren alderantzizkoa modulu "m" existitzen da.
    public void Inverso(int a,int m)
    {
        int c1=1,c2=-1*(m/a);//a-ren eta b-ren koefizienteak hurrenez hurren
        int t1=0,t2=1;
        int r=m%a;//hondarra
        int x=a,y=r,c;
        while(r!=0)
        {
        c= x/y;//zatidura
        r= x%y;//hondarra
        //koefizienteen aldi baterako balioak gordetzen dira
        c1*=-1*c;
        c2*=-1*c;
        //aurreko korritzea batzen da
        c1+=t1;
        c2+=t2;
        //korritzea eguneratzen da
        t1=-1*(c1-t1)/c;
        t2=-1*(c2-t2)/c;
        x=y;
        y=r;
        }
      if(x==1)//aurreko hondarra 1 bada, elkarrekiko lehenak dira eta alderantzizko existitzen da
            System.out.println(""+t2);
      else
            System.out.println("ez dago alderantzizkorik");
    }

Kanpo estekak

Autoritate kontrola
  • Wikimedia proiektuak
  • Wd Datuak: Q2741788
  • Wd Datuak: Q2741788