Test di Miller-Rabin

Da testwiki.
Vai alla navigazione Vai alla ricerca

Il test di primalità di Miller-Rabin è un test di primalità, ossia un algoritmo per determinare se un numero intero è primo. La sua versione originale, dovuta a Gary Miller, è deterministica, ma dipende dall'ipotesi di Riemann generalizzata, un'importante congettura matematica tuttora aperta. L'algoritmo è stato successivamente modificato da Michael Rabin che ne ha ottenuto una versione probabilistica simile al test di Fermat e al test di Solovay-Strassen.

Definizione

Sia n un numero intero positivo non primo (quindi dispari). I numeri positivi b<n tali che MCD(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 MCD(b,n)=1.

Questo è il test di primalità che stavamo presentando:

Fissato un intero dispari n>1, lo possiamo scrivere come n=2st+1, con s0 e t dispari. Il test T1 si sintetizza nei seguenti:

  1. scegliamo a caso un intero b1, con 1<b1<n, e calcoliamo MCD(b1,n);
  2. se MCD(b1,n)>1, allora n non è primo, ed abbiamo finito;
  3. se MCD(b1,n)=1, calcoliamo b1t(modn). Se b1t±1(modn), allora n è primo oppure è pseudoprimo forte in base b1;
  4. se non vale che b1t±1(modn), calcoliamo b12t(modn). Se b12t1(modn), allora n è pseudoprimo forte in base b1;
  5. se non vale che b12t1(modn), passiamo a b14t e a tutte le altre potenze di 2 moltiplicate per t. Se tutti i b12rt, per r=1,,s1, 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, per m intero positivo, la definizione è analoga:

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

Considerazioni finali sul test

Si può subito notare che, a differenza dei test di Fermat e test di Wilson, qui i calcoli sono minori in numero e molto più semplici, e si può dimostrare che il livello di complessità computazionale è polinomiale, mentre gli altri due presentano una difficoltà computazionale esponenziale. Per quanto riguarda l'affidabilità, anch'essa è molto buona in questo test. Infatti, nonostante sia un test probabilistico, quando effettuiamo il test Tm, sappiamo che la probabilità che n non sia primo e sia uno pseudoprimo forte in base bm è minore di 1/4, e, quindi, la probabilità che n non sia primo ma passi i test T1, T2, ..., Tm è minore di 14m, ossia piccolissima rispetto a quella del test di Fermat.

Assumendo l'ipotesi di Riemann generalizzata, il test di Miller-Rabin si può facilmente modificare in modo da diventare un vero test di primalità e l'algoritmo ad esso associato avrebbe costo O((logn)4logloglogn)[1].

Note

Voci correlate

Altri progetti

Template:Interprogetto

Collegamenti esterni

Template:Portale