



















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Argomenti trattati: continuazione della prima parte,calcolo di quoziente e resto tra polinomi,quanto costa calcolare i Bi,IDFT generale,Cooley-Tukey per n dispari e composto,forma matriciale,generale n=pq,interpolazione geometrica,crittografia,crittografia a chiave pubblica,Eulero,Lagrange,sistema a chiave pubblica RSA,operazioni per RSA,operazioni aritmetiche,algoritmo di Euclide esteso,test di primalità ,Miller-Rabin,Teorema cinese del resto
Tipologia: Appunti
1 / 27
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




















vj = y a′j (^) mod n wj = za−j (^) mod n Yj = z 0 + Y ′
dove
z 0 z 1 z 2 .. . zn− 1
z 1 z 2 z 3 .. . zn− 1
Esempio
v 0 = y′ 1 v 1 = y′ 2 v 2 = y′ 4 v 3 = y′ 3 w 0 = z 1 w 1 = z 3 w 2 = z 4 w 3 = z 2
Noi sappiamo che
y′ h =
∑^ n−^1
j=
ωhj^ zj
e che
vk = y a′k (^) mod n =
∑^ n−^1
j=
ω(a k (^) mod n)j zj =
n∑− 2
t=
ω(a
k (^) mod n)(a−t (^) mod n) za−t (^) mod n =
n∑− 2
t=
ω(a (k−t) (^) mod n) wt =
n∑− 2
t=
ω(a
(k−t) mod n−1) wt (3.4)
Definiamo qs = ωa s e abbiamo
vk =
∑^ n−^2
t=
q((k−t) mod (n−1))wt
−→v = −→q ⊗^ −→w
Siamo arrivati alla convoluzione.
Rimane da dimostrare che:
ωa
(k−t) = ωa
s dove s = (k − t) mod (n − 1)
Infatti se s = (k − t) + λ(n − 1) e ricordando an−^1 ≡n 1
ωa
s = ωa
= ωa (k−t)·aλ(n−1) = = ωa
= ωa (k−t)+a(k−t)μn = = ωa
(k−t) · ωa
(k−t)μn ︸ ︷︷ ︸ 1
= ωa
(k−t)
a 0 b 0 = 1 b 0 =
a 0 a 0 b 1 + b 0 a 1 = 0 b 1 = −
b 0 a 1 a 0 b 2 = −
a 1 b 1 + a 2 b 0 a 0 .. . in generale avrò { B 0 (x) = (^) a^10 Bi+1(x) = 2Bi(x) − B i^2 (x)Ai+1(x)
Mostriamo che
A(x)Bi(x) = 1 + x^2 i Ri(x)
Per induzione i= A(x)B 0 (x) = 1 + a a^10 x + a a^20 x^2 +... = 1 + x^2 0 R 0 (x)
A(x)Bi+1 = 2 A(x)Bi(x) − (Bi(x)A(x))^2 =
= 2
1 + x^2
i Ri(x)
1 + x^2
i Ri(x)
= 2+ 62 x^2
i Ri(x) − 1 − 6 2 x^2
i Ri(x) − x^2
i+ R^2 i (x) = = 1 − x^2
i+ R^2 i (x)
−R^2 i (x) = Ri+1(x)
1 + x^2 i+ Ri+1(x)
perchè Bi+1(x) è come abbiamo scritto. Questo metodo prende spunto dal metodo di Newton per calcolare l’in- verso di un numero. Cioè: x = (^1) k f (x) = (^1) x − k xi+1 = xi − (^) ff ′((xxii)) f ′(xi) = − (^) x^12 1 xi+1 = xi −
x −^ k
(−x^2 i ) = 2xi − kx^21 Pongo xi = Bi(x) e k = A(x) e trovo la formula.
4.1 Quanto costa calcolare i B˜i 31
Lemma 3 Se A(x)Bi(x) = 1 + x^2 i Ri(x) allora i primi 2 i^ coefficienti di Bi(x) coincidono con i primi (^2) i coefficienti di B(x) tale che A(x)B(x) = 1
Dimostrazione Sia βxα^ il coefficiente di grado minimo di B(x) − Bi(x)
A(x) (B(x) − Bi(x)) = 1 −
1 + x^2 i Ri(x)
= −x^2 i Ri(x)
A(x) (B(x) − Bi(x)) = A(x) (βxα^ + β 1 xα+1^ + β 2 xα+2^.. .) = a 0 βxalpha+
... α ≥ 2 i
{ B˜ 0 (x) = − 1 a 0 B^ ˜i+1(x) = 2 B˜i(x) −
B˜^2 i (x)Ai+1(x)
mod x^2 i+1 (4.3)
dove Ai(x) = A(x) mod x^2 i
quindi B˜i+1(x) ha grado ≤ 2 i+1^ − 1
A(x) B˜i(x) = 1 + x^2
i (^) ˜ Ri(x)
Calcolare B^ ˜i+1(x) costa Θ ((i + 1)2i+1) operazione B^ ˜i(x) costa Θ (i 2 i) operazione
Quanto costa calcolare B˜n?
∑^ n
i=
Θ(i 2 i) = Θ
( (^) n ∑
i=
i 21
T = 1 · 21 + 2 · 22 + 3 · 23 +... + n · 2 n 2 T = 1 · 22 + 2 · 23 + 3 · 24 +... + n · 2 n+
4.1 Quanto costa calcolare i B˜i 33
Ora da a(x) riesco a passare ad ˜a(y), da b(x) a ˜b(y), se trovo q˜ ed r˜ posso poi trovare quello che cercavo e cioè q ed r. Il passare ai tilde, mi serve per l’informazione che ho appena scritto sopra, cioè sappiamo il termine di grado minore di r˜. Considero ˜s(y) tale che ˜s(y)˜b(y) = 1
˜s(y)˜a(y) = ˜q(y) + ˜r(y)˜s(y) Quindi
˜q(y) = ˜s(y)˜a(y) − ˜r(y)˜s(y) Dove deg(˜q) ≤ n − m e ˜r(y)˜s(y) ha coefficienti di grado ≥ xn−l. Essendo l < m =⇒ n − l > n − m i coefficienti di q˜ sono dati dai primi n − m + 1 coefficienti di ˜a(y)s˜(y) che posso calcolare dati i primi n − m + 1 coef di ˜s(y).
Esempio
a(x) = x^4 + x^3 − 3 x^2 − 2 x + 3 n = 4 b(x) = x + 1 m = 1 deg(q(x)) = 3 infatti n − m = 3 r(x) costante l = 0 ˜a(y) = 1 + y − 3 y^2 − 2 y^3 + 3y^4 ˜b(y) = 1 + y
˜s(y) = 1 − y + y^2 − y^3 +...
1 + y − 3 y^2 − 2 y^3 + 3y^4
1 − y + y^2 − y^3
= 1 − 6 y+ 6 y^2 − 6 y^3 + 6 y− 6 y^2 + 6 y^3 − 6 y^4 − 3 y^2 + 3y^3 − 2 y^3 = = 1 − 3 y^2 + y^3
Facciamo una verifica a(x) − q(x)b(x) = x^4 + x^3 − 3 x^2 − 2 x + 3 − x^4 + 3x^2 − x − x^3 + 3x − 1 = 2
Cominciamo con n = 3m
IDFT: dato un polinomio P (t) =
∑^ n−^1
j=
zj tj^ , vogliamo calcolare P
ωkn
per
k = 0, 1 ,... , n − 1 con ωn radire n − esima primitiva. Scriviamo
P (t) =
z 0 + z 3 t^3 +...
z 1 t + z 4 t^4 + z 7 t^7
z 2 t^2 + z 5 t^5 +...
Dove P 0 (x) = z 0 + z 3 x + z 6 x^2 +... P 1 (x) = z 1 + z 1 x + z 7 x^2 +... P 2 (x) = z 2 + z 5 x + z 8 x^2 +...
grado m
ωnk
ω^3 nk
ωn^3 k
ω^3 nk
dove ω n^3 = ωm radice primitiva m − esima dell’unità. Per k = 0, 1 ,... , m − 1 tutto va bene
Pn
ωnk
ωmt
ωmk
ωmk
Per gli altri k devo fare qualche passaggio in più.
Pn
ωnk
= Pn
ωnm+q
ωmm+q
ωmm+q
ωmm+q
= P 0 (ωqm) + ωmn +qP 1 (ωqm) +
ω^2 n
)m+q P 2 (ωqm)
5.1 Cooley-Tukey per n dispari e composto 36
congrue a 1 modulo 3 in metà congrue a 2 modulo 3 in basso faccio le trasformate di ordine m, cioè n 3 faccio l’equivalente di somma e differente e poi calcoli.
Ancora più in generale considero n = pq. Cosa devo fare:
0 ωn 0 0 0 0 0 ω n^2 0 0 0 0
0 0 0 0 ωq n−^1
e
I ωpI ω p^2 I... ω pp− 1 I I I I...
I ωjkp I
Bisogna capire bene che cos’è questa matrice. Per semplicità proviamo a capirlo con n=3m. Facciamo i primi passi e arriviamo ad avere un vettore suddiviso i tre parti e devo svolgere questa operazione:
I ω 3 I ω 32 I I ω^23 Iω 3 I
v(0) v(1) v(2)
v(0)^ + v(1)^ + v(2) v(0)^ + ω 3 v(1)^ + ω^23 v(2) v(0)^ + ω^23 v(1)^ + ω 3 v(2) Quindi sono q trasformate di ordine p
Int GEN_IDFT(double complex z[], int n,double complex w) {
5.1 Cooley-Tukey per n dispari e composto 37
if (n==1) return 1; if (n%2==0) {passa a n/2 usando cooley-turkey} else { p= fattore(n); if(p>1) {fai p trasformate di ordine n/p + n/p trasformate di ordine p} (IDFT_PQ) else IDFT_n_primo; } }
IDFT_PQ(double complex z[],int p, int q,double complex w) %dove w^{pq} =1 e z ha lunghezza pq { Complex vettori; vettori = (complex)malloc(p*sizeof(complex *)); if (vettori== NULL) ERRORE! for (i=0;i
Polinomio trigonometrico:
F (x) =
∑^ m
j=
(α cos jx + β sin jx) grado m
L’interpolazione risulta più facile se si usano punti equistanziati: fissiamo n punti equistanziati nell’intervallo
xk =
2 π n
k k = 0, 1 , 2 ,... , n − 1
Vogliamo trovare il polinomio trigonometrico F (x) tale che F (xk) = f (xk) k = 0, 1 , 2 , , n − 1 ; dove f (x) è la funzione che vogliamo interpolare.
Teorema 5 Il polinomio trigonometrico di interpolazione per f () su xk = 2 π n k,^ k^ = 0,^1 ,^2 ,... , n^ −^1 è dato da:
F (x) =
α 0 2 +
m∑− 1
j=
(αj cos jx + βj sin jx) n = 2m − 1
α 0 2 +
m∑− 1
j=
(αj cos jx + βj sin jx) +
αm 2
cos mx n = 2m
(6.1)
αj =
n
∑^ n−^1
k=
f (xk) cos jxk
βj =
n
n∑− 1
k=
f (xk) sin jxk
il costo dell’utilizzo di queste formule è Θ(n^2 ). Per diminuire il costo si può usare la trasformata di fourier e la sua inversa sapendo che:
αj = 2ℜ(zj ) βj = − 2 ℑ(zj ) −→z = DF T (f (−→x ))
Il costo di queste formule èΘ(n log n)
Dimostrazione (caso n = 2m − 1 )
yk = f (xk) −→ Z = DF T
f (xk) = yk =
n∑− 1
j=
ωjkzj =
m∑− 1
j=
ωjkzj +
(^2) ∑m− 2
j=m
ωjkzj =
A questo punto abbiamo bisogno del risultato di un lemma
Lemma 4 Se
e
Y sono reali, allora
z 0 è reale
zj = zn−j
Dimostrazione
z 0 =
n
yi
zj =
ω−jkyk
Teorema 6 Sia f (x) periodica di periodo 2 π e C^2 , allora ∀ǫ ∃ un polinomio trigonometrico di interpolazione su n punti equispaziati tale che:
|f (x) − Fn(x)| ≤ ǫ ∀x ∈ [0, 2 π]
(non dimostriamo)
L’interpolazione trigonometrica permette di scomporre una funzione nella somma di funzioni periodiche (quindi la rappresentazione nel dominio delle frequenze)
Analisi e manipolazione segnali audio
Compressione audio (esempio formato mp3) il pezzo musicale viene sud- diviso in piccoli pezzi a ciascuno viene fatto fourier attraverso la rap- presentazione nel dominio delle frequenze, vengono tolte le frequente non percettibili dall’orecchio umano e quindi riuniti, questo fa si che il file sia più piccolo (una cosa simile capita con i telefoni, che limitano le frequenze che passano a quelle tipiche della voce umana)
Sonar passivi fanno in modo che un sommergibile non si riveli attraverso il sonar a un altro sommergibile.
La crittografia serve per mandarsi messaggi in modo segreto, quindi se qual- cuno intercetta il messaggio non è in grado di capirne il contenuto. Due entità A e B devono mandarsi un messaggio e vogliono che chiunque intercetti il loro messaggio lo possa vedere ma non capire. I primi metodi di crittografia erano molto elementari:
Cifrario di cesare Le a diventavano ad esempio la lettera che ha tre po- sizioni dopo nell’alfabeto, quindi d ecc
In generale però questi tipi di codifica basati su trasposizioni di lettere sono attaccabili mediante analisi statistiche. Per complicare la codifica allora suc- cessivamente il testo veniva allungato a un numero quadrato di lettere e il testo veniva scritto in verticale in un testo che aveva lo stesso numero di righe e colonne. Un passo successivo fu:
Cifrario di Augusto In questo metodo fu inserita l’idea di chiave: una sequenza di caratteri (fissa)che veniva usata su un messaggio (una se- quenza di caratteri che cambia). Per codificare il messaggio indico per ogni carattere la distanza nell’alfabeto dal corrispondente carat- tere della chiave Es: chiave: ciao messaggio nove messaggio codificato: 12,17,2,8.
Ulteriore passo avanti era quello di fare in modo che il messaggio non si capisse fosse un messaggio cifrato. A volte veniva spedito un foglietto con dei buchi che se veniva messa su una determinata pagina di un determinato libro leggeva il messaggio. Un passo successivo (Bacone) ero quello di scrivere un testo qualunque ma con la particolarità di scrivere le lettere in modo più leggero o più pesante, il leggero corrispondeva a 0 e il pesante a 1 e il messaggio era quindi in binario.
7.2 Sistema a chiave pubblica RSA 45
Dimostrazione Se x ≡n 0 ok.
Se M CD(x, n) = 1 allora x1+λφ(n)^ ≡ x ·
xφ(n)
)λ ︸ ︷︷ ︸ 1
≡ x
Supponiamo x ≡p 0 (x mulpiplo di p) e M CD(x, q) = 1 Voglio dimostrare che:
x^1 −λφ(n)^ − x ≡n 0
Dimostro che
x^1 −λφ(n)^ − x ≡p 0 ovvio perchè x^1 −λφ(n)^ ≡p 0 e x ≡p 0
Dimostro che x^1 −λφ(n)^ − x ≡q 0
x^1 −λφ(n)^ ≡ x · x(p−1)(q−1) λ ≡ x
x(q−1) ︸ ︷︷ ︸ ≡q 1
(p−1)λ ≡ x
Sia A che vuole ricevere dei messaggi. A genera due numeri primi p e q grandi (con centinai di cifre). A calcola n = pq, phi(n) = (p − 1)(q − 1). A calcola un intero tale che M CD(e, φ(n)) = 1. A rende noti (n, e) che è la chiave pubblica di A. Supponiamo che B debba mandare un messaggio ad A. B trasforma il messaggio in interi compresi tra 1 e n − 1 m 1 , m 2 , m 3 ,... , mk B calcola e spedisce i valori:
xi = mei mod n
A decodifica il messaggio mediante l’algoritmo di Euclide esteso. Calcola d e t tale che ed + φ(n)t = 1
A calcola yi = xdi mod n
yi ≡ xdi ≡ (mei )d^ ≡ medi ≡ m1+ i λφ(n)≡ mi
7.2 Sistema a chiave pubblica RSA 46
Esempio p=11 q=
n=55 φ(n) = 40 e = 7 quindi chiave pubblica (55,7) 2 27 mod 55 = 18 La decodifica 7 ∗ d + 40 ∗ t = 1 d = 23 t = − 4
Ora mostriamo che dato n = pq se so calcolare φ(n) velocemente, allora posso calcolare p e q
φ(n) = (p − 1)(q − 1) = pq − p − q + 1 =⇒
p + q = n + 1 − φ(n) pq = n
Siccome calcolare p e q è difficile allora calcolare φ(n) è difficile. quindi anche se la chiave è pubblica (cioè il meccanismo di codifica) non è possibile la codifica in tempi ragionevoli. Nelsistema RSA i messaggi si considerano sicuri perchè il problema della fattorizzazione è difficile.
Definizione 3 Diciamo che una operazione fra interi la possiamo eseguire velocemente se esiste un algoritmo polinomiale rispetto al numero di cifre.
Per il problema della fattorizzazione non sono noti algoritmi polinomiali nel numero delle cifre. Per fattorizzare n con l’algoritmo banale ho bisogno di n
n operazioni. Costo rispetto a n cifre:
2 log^2 n
=∼ 2 log^2
√n