Biderketarekiko alderantzizko modular

Biderketarekiko alderantzizko modularra aritmetika modularrareko eragiketa bat da.  zenbaki oso baten biderketarekiko alderantzizkoa modulu  beste  zenbaki oso bat da non:

hau da,  biderketa 1-arekin kongruentea den (modulu ).  zenbakia  zenbakiaren alderantzizkoa modulu  dela horrela adierazten da:

Biderketarekiko alderantzizko modularra ez da beti existitzen. -ren alderantzizko modularra existitzen da baldin eta soilik baldin  eta  elkarrekiko lehenak badira, hau da,  bada.

 zenbakiaren alderantzizkoa modulu  existitzen denean, orduan beste zenbaki bat  balioaz zatitzearen eragiketa (modulu ) defini daiteke; zenbaki bat  balioaz zatitzea  alderantzizko modularraz biderkatzea da.  zenbaki lehena bada, orduan zenbaki guztiak dira alderantzikagarriak, -a izan ezik.

Azalpena 
Biderketaren alderantzizko modularra ez da bakarra. Normalean, -ren alderantzizkotzat (modulu ) hartzen den  zenbakia aukera guztien artean txikiena den zenbaki arrunta izaten da.

Adibidea:

Demagun  zenbakiaren alderantzizkoa modulu  kalkulatu nahi dela,
.

 betetzen duen  zenbakia aurkitu nahi da, hau da,

beteko duena. Kongruentzia hori betetzen duen zenbaki arrunt txikiena  da ( partizioko balioa da). Horrela egiazta daiteke:

Esan bezala,  ez da aukera bakarra, -ri -ren multiploak gehituz, hau da,  beste  balio posibleak lor daitezke. Horrela, {..., −18, −7, 15, 26, ...} multzoko balio guztietarako  betetzen da.

Kalkuluak

Euklidesen Algoritmo Hedatua 

Euklidesen algoritmo hedatua erabiliz -ren biderketarekiko alderantzikoa modulu  kalkula daiteke.

Esan dugunez, -ren alderantzikoa modulu 

betetzen duen  zenbaki osoa da,  betetzen da, hau da,  balioak  zatitzen du. Hortaz,

 non 

Beste era batean idatzita:

Euklidesen algoritmo hedatuak ebazten duen problema, hain zuzen ere, hori da.  eta  zenbaki osoak izanik,  zatitzaile komunetako handiena eta

berdintza betetzen duten  eta  zenbaki osoak kalkula daitezke. Kasu honetan  aurrez ezarrita dator. Baldin  bada, orduan -ren alderantzikoa modulu  ez da existitzen.

 bada, algoritmoa  denboran exekutatuko da.

Adibidea

 eta  izanik, -ren alderantzizkoa modulu  horrela kalkulatzen da. Hasteko, existitzen dela egiaztatu behar da, hau da,  dela. Horretarako, Euklidesen algoritmoa aplikatuko dugu. Ondoren,  kalkulatzeko egindako eragiketetatik  lortuko dugu:

  denez,  idatz daiteke. Hau da, . Hondarra askatuz: 
  denez, . Hondarra askatuz: 
  denez, . Hondarra askatuz: 
  denez, . Hondarra askatuz: 
  denez, . Hortaz,  betetzen denez,  eta  elkarrekiko lehenak dira eta ondorioz, bilatzen dugun alderantzizko modularra existitzen da.
 Koefizienteen kalkulurako abiapuntua 4. urratseko  adierazpena da. Ondorengo urratsetan aurreko urratsetako hondarren adierazpenak ordezkatu behar dira.
 3. urratseko hondarra 6. urratseko ekuazioan txertatuz: , hau da, .
 2. urratseko hondarra 7. urratseko ekuazioan txertatuz: , hau da, .
 1. urratseko hondarra 8. urratseko ekuazioan txertatuz: , hau da, . Esan dezakegu  dela,  ekuazioa kontuan hartuz.
  negatiboa bada, -en alderantzizkoa  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 

Aritmetika modularra
Operazio bitarrak