Implementazioni di algoritmi/Test di Miller-Rabin

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Implementazioni di algoritmi

Test di primalità di Miller-Rabin

Sia n un numero intero positivo dispari e non primo. I numeri positivi b<n tali che M.C.D.(b,n)=1, e tali che n sia uno pseudoprimo di Eulero forte in base b sono non più di un quarto di tutti i numeri positivi b<n tali che M.C.D.(b,n)=1.

Questo è il test di primalita' che stavamo presentando:

Se fisso un intero dispari n>1, lo posso scrivere come n=2 s*t+1, con t dispari. Il test T1 si sintetizza nei seguenti:

  1. scegliamo a caso un intero b1, con 1<b1<n, e calcoliamo M.C.D.(b1, n);
  2. se M.C.D.(b1, n) > 1, allora n non è primo, ed abbiamo finito;
  3. se M.C.D.(b1, n) = 1, calcoliamo b 1t (mod n). Se b 1t ≡ +1 (mod n) oppure b 1t ≡ -1 (mod n), n è primo oppure è pseudoprimo forte in base b1;
  4. se non vale che b 1t ≡ +1 (mod n) oppure b 1t ≡ -1 (mod n), calcoliamo b 12t (mod n). Se b 12t ≡ -1 (mod n), allora n è pseudoprimo forte in base b1;
  5. se non vale che b 12t ≡ -1 (mod n), passiamo a b 14t, e a tutte le altre potenze di 2, moltiplicate per t. Se tutti i b 12r*t, per r=1,..., s-1, non sono mai congrui a -1 modulo n, allora n non è un primo. Altrimenti n è uno pseudoprimo forte in base b1.

Per tutti gli altri test {Tm}m, m∈, la definizione è analoga:

  1. scegliamo a caso un intero bm, con 1<bm<n, e calcoliamo M.C.D.(bm, n);
  2. se M.C.D.(bm, n) > 1, allora n non è primo, ed abbiamo finito;
  3. se M.C.D.(bm, n) = 1, calcoliamo b mt (mod n), e procediamo come nel primo test. In questo modo troviamo che p non è primo, oppure che n è pseudoprimo forte in base bm.

Template:Avanzamento