Algoritmo AKS - vincenzofiore83

Transcript

Algoritmo AKS - vincenzofiore83
Corso di
Tecnologie per la sicurezza LS
Algoritmo AKS
Vincenzo Fiore
Agrawal, Kayal, Saxena
Nell'agosto del 2002 tre ricercatori indiani, Manindra Agrawal, Neeraj Kayal e
Nitin Saxena, hanno presentato un algoritmo deterministico con tempo di
esecuzione polinomiale per determinare se un dato numero è primo.
Idea
Il test di primalità AKS[1] si basa su la seguente generalizzazione del Piccolo
Teorema di Fermat:
L'uguaglianza precedente rappresenta essa stessa un semplice test di primalità,
ma la sua verifica richiede un tempo esponenziale in quanto, nel caso peggiore, è
necessario valutare n coefficienti. Inoltre il test fallisce per una specifica classe di
numeri, noti come pseudoprimi, che includono ad esempio i Numeri di Carmichael.
Algoritmo AKS
3
Idea
Al fine di ridurre il numero dei coefficienti si valutano entrambi i membri
dell'equazione 1.1 modulo un polinomio della forma Xr-1.
In altre parole, si verifica se la seguente equazione è soddisfatta:
Dal Lemma 1.1 segue che qualsiasi primo n soddisfa l'equazione 1.2 per tutti i
valori di a ed r.
Algoritmo AKS
4
Idea
Problema: alcuni numeri composti soddisfano anch'essi l'equazione per un
piccolo numero di a ed r.
Soluzione: è sempre possibile individuare un opportuno e piccolo r ed un
opportuno e piccolo insieme di interi A tale che se l'equivalenza 1.2 è soddisfatta
per tutti gli a in A allora n deve essere primo.
Algoritmo AKS
5
Algoritmo originale
1
floor(x) è il più grande intero minore o uguale ad x
Algoritmo AKS
6
Algoritmo originale
(1)Determina se il numero è composto verificando se è una potenza perfetta.
(2)Utilizza il Piccolo Teorema di Fermat per individuare un appropriato valore di
r , che viene scelto in modo tale da essere il più piccolo valore maggiore di 4
log2n per il quale è ancora valida l'equazione 1.2 .
(3)Determina il più grande divisore comune a n e a tutti i valori minori o uguali a
r: ciò è necessario per assicurarsi che tutti i valori minori o uguali a r siano
coprimi con n.
(4)Verifica se il valore individuato per r è maggiore o uguale ad n: in questo
caso n è primo.
(5)Tutte le operazioni vengono eseguite nell'anello polinomiale Zn[X]/(Xr-1). Sul
lato sinistro dell'equazione viene realizzata l'esponenziazione polinomiale
nell'anello mentre il lato destro viene semplicemente ridotto per restare
nell'anello.
Algoritmo AKS
7
Algoritmo originale
Questi due valori vengono comparati per determinare se sono equivalenti; la
relazione deve essere testata per tutti i valori di a da 1 al valore di bound
individuato precedentemente. Se la relazione è valida per tutti i valori di a, allora
il numero è primo.
L'algoritmo ha complessità O(log10.5 n).
Algoritmo AKS
8
Algoritmo modificato
(H. Lenstra, C. Poerance)
Algoritmo AKS
9
Algoritmo modificato
caratteristiche e complessità
La funzione f(X) è la stessa di prima, Xr-1, cioè un polinomio di grado r con
coefficienti interi tale che l'anello Z[X]=(n, f(X)) diventa uno pseudo-campo.
●
Il valore di r è ridotto approssimativamente di un fattore quattro; questo è
significativo in quanto riduce notevolmente il numero di iterazioni richieste nel
loop finale; inoltre il limite superiore del loop è stato ulteriormente ridotto di un
fattore 2.
●
●
L'algoritmo ha complessità O(log7.5 n) [3].
Algoritmo AKS
10
Possibile miglioramento
Tale congettura permette di ridurre significativamente il tempo impiegato
nel loop finale dell'algoritmo in quanto consente di verificare l'equazione
per un unico valore di a, a condizione che r sia stato scelto correttamente.
Questa congettura riduce la complessità totale dell'algoritmo a O(log3 n).
Algoritmo AKS
11
Bibliografia
●
●
●
[1] M. Agrawal, N. Kayal,N. Saxena, PRIMES is in P (Revised),
2003.
[2] S. Aaronson, The Prime Facts: From Euclid to AKS, 2003.
[3] H. Lenstra, C. Pomerance, Primality Testing with Gaussian
Periods, 2003.
Algoritmo AKS
12