Skip to main content
IBM Quantum Platform

Algoritmo di Shor

Ora ci occuperemo del problema della fattorizzazione dei numeri interi e vedremo come può essere risolto in modo efficiente su un computer quantistico utilizzando la stima di fase. L'algoritmo che otterremo è l' algoritmo di Shor per la fattorizzazione dei numeri interi. Shor non ha descritto il suo algoritmo specificamente in termini di stima di fase, ma è un modo naturale e intuitivo per spiegarne il funzionamento.

Inizieremo discutendo un problema intermedio noto come problema di ricerca dell'ordine e vedremo come la stima di fase fornisca una soluzione a questo problema. Vedremo poi come una soluzione efficiente al problema della ricerca degli ordini ci dia una soluzione efficiente al problema della fattorizzazione degli interi. (Quando la soluzione di un problema fornisce una soluzione a un altro problema di questo tipo, si dice che il secondo problema si riduce al primo, quindi in questo caso stiamo riducendo la fattorizzazione degli interi alla ricerca di ordini) Questa seconda parte dell'algoritmo di Shor non fa affatto uso dell'informatica quantistica, ma è completamente classica. Il calcolo quantistico è necessario solo per risolvere la ricerca di ordini.


Il problema della ricerca degli ordini

Alcuni concetti fondamentali di teoria dei numeri

Per spiegare il problema della ricerca dell'ordine e il modo in cui può essere risolto utilizzando la stima di fase, sarà utile iniziare con un paio di concetti di base della teoria dei numeri e introdurre alcune notazioni utili lungo il percorso.

Per cominciare, per ogni dato intero positivo N,N, definiamo l'insieme ZN\mathbb{Z}_N in questo modo.

ZN={0,1,,N1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

Per esempio, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; e così via.

Si tratta di insiemi di numeri, ma possiamo considerarli più che insiemi. In particolare, possiamo pensare a operazioni aritmetiche su ZN\mathbb{Z}_N come l'addizione e la moltiplicazione - e se accettiamo di prendere sempre le nostre risposte modulo NN (cioè dividere per NN e prendere il resto come risultato), rimarremo sempre all'interno di questo insieme quando eseguiamo queste operazioni. Le due operazioni specifiche di addizione e moltiplicazione, entrambe prese modulo N,N, trasformano ZN\mathbb{Z}_N in un anello, che è un tipo di oggetto di fondamentale importanza in algebra.

Per esempio, 33 e 55 sono elementi di Z7,\mathbb{Z}_7, e se li moltiplichiamo tra loro otteniamo 35=15,3\cdot 5 = 15, che, diviso per 11, lascia un resto di 7.7. A volte lo esprimiamo come segue.

351  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

Ma possiamo anche scrivere semplicemente 35=1,3 \cdot 5 = 1,, purché sia chiaro che stiamo lavorando in Z7,\mathbb{Z}_7,, per mantenere la notazione più semplice possibile.

A titolo di esempio, ecco le tabelle di addizione e moltiplicazione di Z6.\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

Tra gli NN elementi di ZN,\mathbb{Z}_N, sono speciali gli elementi aZNa\in\mathbb{Z}_N che soddisfano gcd(a,N)=1\gcd(a,N) = 1. Spesso l'insieme che contiene questi elementi viene indicato con una stella, come in questo caso.

ZN={aZN:gcd(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

Se concentriamo la nostra attenzione sull'operazione di moltiplicazione, l'insieme ZN\mathbb{Z}_N^{\ast} forma un gruppo - in particolare un gruppo abeliano - che è un altro importante tipo di oggetto in algebra. È un fatto fondamentale di questi insiemi (e dei gruppi finiti in generale), che se scegliamo un elemento qualsiasi aZNa\in\mathbb{Z}_N^{\ast} e moltiplichiamo ripetutamente aa a se stesso, alla fine otterremo sempre il numero 1.1.

Per un primo esempio, prendiamo N=6.N=6. Abbiamo che 5Z65\in\mathbb{Z}_6^{\ast} perché gcd(5,6)=1,\gcd(5,6) = 1, e se moltiplichiamo 55 a se stesso otteniamo 1,1, come conferma la tabella precedente.

52=1(working within Z6)5^2 = 1 \quad \text{(working within $\mathbb{Z}_6$)}

Come secondo esempio, prendiamo N=21.N = 21. Se scorriamo i numeri da 00 a 20,20, quelli che hanno GCD uguale a 11 con 2121 sono i seguenti.

Z21={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

Per ciascuno di questi elementi, è possibile elevare il numero a una potenza intera positiva per ottenere 1.1. Ecco le potenze più piccole per le quali funziona:

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

Naturalmente, per tutte queste equazioni lavoriamo all'interno di Z21\mathbb{Z}_{21}, che non ci siamo presi la briga di scrivere: lo consideriamo implicito per non appesantire le cose. Continueremo a farlo nel resto della lezione.

Descrizione del problema e collegamento alla stima di fase

Ora possiamo enunciare il problema della ricerca dell'ordine.

Order finding

Input: numeri interi positivi NN e aa soddisfacenti gcd(N,a)=1\gcd(N,a) = 1\ Output: il più piccolo intero positivo rr tale che ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

In alternativa, in termini di notazione appena introdotta sopra, ci viene dato aZN,a \in \mathbb{Z}_N^{\ast}, e stiamo cercando il più piccolo intero positivo rr tale che ar=1.a^r = 1. Questo numero rr è chiamato ordine di aa modulo N.N.

Per collegare il problema dell'order-finding alla stima della fase, pensiamo all'operazione definita su un sistema i cui stati classici corrispondono a ZN,\mathbb{Z}_N, dove moltiplichiamo per un elemento fisso aZN.a\in\mathbb{Z}_N^{\ast}.

Max=ax(for each xZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(for each $x\in\mathbb{Z}_N$)}

Per essere chiari, stiamo facendo la moltiplicazione in ZN,\mathbb{Z}_N,, quindi è implicito che stiamo prendendo il prodotto modulo NN all'interno del ket sul lato destro dell'equazione.

Ad esempio, se prendiamo N=15N = 15 e a=2,a=2,, l'azione di M2M_2 sulla base standard {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} è la seguente.

M20=0M25=10M210=5M21=2M26=12M211=7M22=4M27=14M212=9M23=6M28=1M213=11M24=8M29=3M214=13\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

Si tratta di un'operazione unitaria a condizione che gcd(a,N)=1;\gcd(a,N)=1; rimescoli gli elementi della base standard {0,,N1},\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, quindi come matrice è una matrice di permutazione. È evidente dalla sua definizione che questa operazione è deterministica e un modo semplice per vedere che è invertibile è pensare all'ordine rr di aa modulo N,N, e riconoscere che l'inverso di MaM_a è Mar1.M_a^{r-1}.

Mar1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

C'è un altro modo di pensare all'inverso che non richiede alcuna conoscenza di rr (che, dopo tutto, è ciò che stiamo cercando di calcolare). Per ogni elemento aZNa\in\mathbb{Z}_N^{\ast} c'è sempre un unico elemento bZNb\in\mathbb{Z}_N^{\ast} che soddisfa ab=1.ab=1. Questo elemento bb viene indicato con a1,a^{-1}, e può essere calcolato in modo efficiente; un'estensione dell'algoritmo GCD di Euclide lo fa con un costo quadratico in lg(N).\operatorname{lg}(N). E quindi

Ma1Ma=Ma1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Quindi, l'operazione MaM_a è sia deterministica che invertibile. Ciò implica che è descritto da una matrice di permutazione e quindi è unitario.

Ora pensiamo agli autovettori e agli autovalori dell'operazione Ma,M_a, assumendo che aZN.a\in\mathbb{Z}_N^{\ast}. Come appena argomentato, questa ipotesi ci dice che MaM_a è unitario.

Ci sono NN autovalori di Ma,M_a, che possono includere lo stesso autovalore ripetuto più volte, e in generale c'è una certa libertà nella selezione degli autovalori corrispondenti - ma non dovremo preoccuparci di tutte le possibilità. Iniziamo in modo semplice e identifichiamo un solo autovettore di Ma.M_a.

ψ0=1+a++ar1r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

Il numero rr è l'ordine di aa modulo N,N, qui e nel resto della lezione. L'autovalore associato a questo autovalore è 11 perché non viene modificato quando si moltiplica per a.a.

Maψ0=a++ar1+arr=a++ar1+1r=ψ0M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

Questo accade perché ar=1,a^r = 1, quindi ogni stato base standard ak\vert a^k \rangle viene spostato a ak+1\vert a^{k+1} \rangle per kr1,k\leq r-1, e ar1\vert a^{r-1} \rangle viene spostato di nuovo a 1.\vert 1\rangle. In termini informali, è come se stessimo mescolando lentamente ψ0,\vert \psi_0 \rangle, ma è già completamente mescolato, quindi non cambia nulla.

Ecco un altro esempio di autovettore di Ma.M_a. Questo è più interessante nel contesto della ricerca dell'ordine e della stima della fase.

ψ1=1+ωr1a++ωr(r1)ar1r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

In alternativa, possiamo scrivere questo vettore utilizzando una sommatoria come segue.

ψ1=1rk=0r1ωrkak\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

In questo caso il numero complesso ωr=e2πi/r\omega_r = e^{2\pi i/r} appare naturalmente, grazie al modo in cui la moltiplicazione per aa funziona modulo N.N. Questa volta l'autovalore corrispondente è ωr.\omega_r. Per vedere questo, possiamo prima calcolare come segue.

Maψ1=1rk=0r1ωrkMaak=1rk=0r1ωrkak+1=1rk=1rωr(k1)ak=1rωrk=1rωrkakM_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

Allora, poiché ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 e ar=1=a0,\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vediamo che

1rk=1rωrkak=1rk=0r1ωrkak=ψ1,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

così Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Utilizzando lo stesso ragionamento, possiamo identificare ulteriori coppie autovettore/autovalore per Ma.M_a. Per qualsiasi scelta di j{0,,r1}j\in\{0,\ldots,r-1\} si ha che

ψj=1rk=0r1ωrjkak\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

è un autovettore di MaM_a il cui autovalore corrispondente è ωrj.\omega_r^j.

Maψj=ωrjψjM_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Esistono altri autovettori di Ma,M_a,, ma non è il caso di occuparsene: ci concentreremo solo sugli autovettori ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle che abbiamo appena identificato.


Ricerca dell'ordine tramite stima di fase

Per risolvere il problema della ricerca dell'ordine per una data scelta di aZN,a\in\mathbb{Z}_N^{\ast}, possiamo applicare la procedura di stima della fase all'operazione Ma.M_a.

Per fare ciò, dobbiamo implementare in modo efficiente con un circuito quantistico non solo MaM_a, ma anche Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, e così via, spingendoci fino a dove è necessario per ottenere una stima sufficientemente precisa dalla procedura di stima della fase. Qui spiegheremo come si può fare e in seguito capiremo esattamente quanta precisione è necessaria.

Cominciamo con l'operazione MaM_a da sola. Naturalmente, poiché stiamo lavorando con il modello dei circuiti quantistici, useremo la notazione binaria per codificare i numeri compresi tra 00 e N1.N-1. Il numero più grande che dobbiamo codificare è N1,N-1,, quindi il numero di bit necessari è

n=lg(N1)=log(N1)+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Ad esempio, se N=21N = 21 abbiamo n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Ecco come appare la codifica degli elementi di Z21\mathbb{Z}_{21} come stringhe binarie di lunghezza 55.

0000001000012010100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

Ed ecco una definizione precisa di come MaM_a sia definito come un'operazione nn -qubit.

Max={ax  (mod  N)0x<NxNx<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

Il punto è che, sebbene ci interessi solo il funzionamento di MaM_a per 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle,, dobbiamo specificare come funziona per i restanti stati base standard di 2nN2^n - N - e dobbiamo farlo in modo da ottenere un'operazione unitaria. Definendo MaM_a in modo che non influisca sugli altri stati base standard, si ottiene questo risultato.

Utilizzando gli algoritmi per la moltiplicazione e la divisione di interi discussi nella lezione precedente, insieme alla metodologia per le loro implementazioni reversibili e prive di spazzatura, possiamo costruire un circuito quantistico che esegua Ma,M_a, per qualsiasi scelta di aZN,a\in\mathbb{Z}_N^{\ast}, al costo O(n2).O(n^2). Ecco un modo per farlo.

  1. Costruire un circuito per eseguire l'operazione
xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

Dove

fa(x)={ax  (mod  N)0x<NxNx<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

utilizzando il metodo descritto nella lezione precedente. Si ottiene così un circuito di dimensioni O(n2).O(n^2).

  1. Scambiare i due sistemi nn -qubit utilizzando le porte di scambio nn per scambiare i qubit individualmente.

  2. In modo simile al primo passo, costruite un circuito per l'operazione

xyxyfa1(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

dove a1a^{-1} è l'inverso di aa in ZN.\mathbb{Z}_N^{\ast}.

Inizializzando i qubit del fondo nn e componendo i tre passaggi, otteniamo questa trasformazione:

x0nstep 1xfa(x)step 2fa(x)xstep 3fa(x)xfa1(fa(x))=fa(x)0n\vert x \rangle \vert 0^n \rangle \stackrel{\text{step 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{step 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{step 3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

Il metodo richiede i qubit dello spazio di lavoro, ma alla fine vengono riportati allo stato inizializzato, il che ci permette di usare questi circuiti per la stima della fase. Il costo totale del circuito che otteniamo è O(n2).O(n^2).

Per eseguire Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, e così via, possiamo usare esattamente lo stesso metodo, tranne che per il fatto che sostituiamo aa con a2,a^2, a4,a^4, a8,a^8, e così via, come elementi di ZN.\mathbb{Z}_N^{\ast}. Cioè, per qualsiasi potenza kk che scegliamo, possiamo creare un circuito per MakM_a^k non iterando kk per il circuito per Ma,M_a,, ma calcolando b=akZNb = a^k \in \mathbb{Z}_N^{\ast} e poi utilizzando il circuito per Mb.M_b.

Il calcolo delle potenze akZNa^k \in \mathbb{Z}_N è il problema dell' esponenziazione modulare menzionato nella lezione precedente. Questo calcolo può essere eseguito in modo classico, utilizzando l'algoritmo per l'esponenziazione modulare citato nella lezione precedente (spesso chiamato algoritmo della potenza nella teoria dei numeri computazionali). In effetti, è necessario solo power-of-2 potenze di a,a, in particolare a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, e possiamo ottenere queste potenze con una quadratura iterativa di m1m-1 volte. Ogni quadratura può essere eseguita da un circuito booleano di dimensione O(n2).O(n^2).

In sostanza, stiamo scaricando il problema dell'iterazione di MaM_a fino a 2m12^{m-1} volte su un calcolo classico efficiente. Ed è una fortuna che questo sia possibile! Per una scelta arbitraria di un circuito quantistico nel problema della stima di fase, questo non è probabilmente possibile - e in tal caso il costo risultante per la stima di fase cresce esponenzialmente nel numero di qubit di controllo m.m.

Soluzione data un vettore proprio conveniente

Per capire come si può risolvere il problema dell'order-finding utilizzando la stima di fase, iniziamo supponendo che eseguiamo la procedura di stima della fase sull'operazione MaM_a utilizzando l'autovettore ψ1.\vert\psi_1\rangle. Mettere le mani su questo autovettore non è facile, quindi la storia non finisce qui, ma è utile iniziare da qui.

L'autovalore di MaM_a corrispondente all'autovettore ψ1\vert \psi_1\rangle è

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

Cioè, ωr=e2πiθ\omega_r = e^{2\pi i \theta} per θ=1/r.\theta = 1/r. Quindi, se eseguiamo la procedura di stima della fase su MaM_a utilizzando l'autovalore ψ1,\vert\psi_1\rangle, otterremo un'approssimazione a 1/r.1/r. Calcolando il reciproco saremo in grado di imparare rr - a patto che la nostra approssimazione sia sufficientemente buona.

Più in dettaglio, quando si esegue la procedura di stima della fase utilizzando i qubit di controllo di mm, si ottiene un numero y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Prendiamo quindi y/2my/2^m come ipotesi per θ,\theta,, che nel caso in esame è 1/r1/r. Per capire qual è rr da questa approssimazione, la cosa più naturale da fare è calcolare il reciproco della nostra approssimazione e arrotondare al numero intero più vicino.

2my+12\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

Ad esempio, supponiamo che r=6r = 6 ed eseguiamo la stima di fase su MaM_a con l'autovettore ψ1\vert\psi_1\rangle utilizzando i bit di controllo di m=5m = 5. La migliore approssimazione 55 -bit a 1/r=1/61/r = 1/6 è 5/32,5/32, e abbiamo una buona probabilità (circa 68%68\% in questo caso) di ottenere il risultato y=5y=5 dalla stima di fase. Abbiamo

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

e arrotondando al numero intero più vicino si ottiene 6,6,, che è la risposta corretta.

D'altra parte, se non usiamo abbastanza precisione, potremmo non ottenere la risposta giusta. Per esempio, se prendiamo m=4m = 4 qubit di controllo nella stima della fase, potremmo ottenere la migliore approssimazione di 44 -bit a 1/r=1/6,1/r = 1/6, che è 3/16.3/16. Prendendo il reciproco si ottiene

2my=163=5.333\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

e arrotondando al numero intero più vicino si ottiene una risposta errata di 5.5.

Di quanta precisione abbiamo bisogno per ottenere la risposta giusta? Sappiamo che l'ordine rr è un numero intero e, intuitivamente, ciò di cui abbiamo bisogno è una precisione sufficiente per distinguere 1/r1/r dalle possibilità vicine, tra cui 1/(r+1)1/(r+1) e 1/(r1).1/(r-1). Il numero più vicino a 1/r1/r di cui dobbiamo preoccuparci è 1/(r+1),1/(r+1), e la distanza tra questi due numeri è

1r1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

Quindi, se vogliamo essere sicuri di non confondere 1/r1/r con 1/(r+1),1/(r+1),, è sufficiente utilizzare una precisione sufficiente a garantire che una migliore approssimazione tra y/2my/2^m e 1/r1/r sia più vicina a 1/r1/r di quanto non lo sia a 1/(r+1).1/(r+1). Se usiamo una precisione tale da garantire che

y2m1r<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

in modo che l'errore sia inferiore alla metà della distanza tra 1/r1/r e 1/(r+1),1/(r+1), allora y/2my/2^m sarà più vicino a 1/r1/r che a qualsiasi altra possibilità, comprese 1/(r+1)1/(r+1) e 1/(r1).1/(r-1).

Possiamo verificarlo come segue. Supponiamo che

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

per ε\varepsilon che soddisfa

ε<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

Prendendo il reciproco si ottiene

2my=11r+ε=r1+εr=rεr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

Massimizzando al numeratore e minimizzando al denominatore, possiamo stabilire quanto siamo lontani da rr come segue.

εr21+εrr22r(r+1)1r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

Siamo a meno di 1/21/2 da r,r, quindi, come previsto, otterremo rr quando arrotonderemo.

Sfortunatamente, poiché non sappiamo ancora cosa sia rr, non possiamo usarlo per dirci di quanta precisione abbiamo bisogno. Si può invece utilizzare il fatto che rr deve essere più piccolo di NN per assicurarsi di utilizzare una precisione sufficiente. In particolare, se utilizziamo un'accuratezza sufficiente a garantire che la migliore approssimazione y/2my/2^m a 1/r1/r soddisfi

y2m1r12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

allora avremo una precisione sufficiente per determinare correttamente rr quando prendiamo il reciproco. L'utilizzo di m=2lg(N)+1m = 2\operatorname{lg}(N)+1 garantisce un'alta probabilità di ottenere una stima con questa precisione con il metodo descritto in precedenza. (L'assunzione di m=2lg(N)m = 2\operatorname{lg}(N) è sufficiente se ci sentiamo a nostro agio con un limite inferiore del 40% sulla probabilità di successo)

Soluzione generale

Come abbiamo appena visto, se disponiamo dell'autovettore ψ1\vert \psi_1 \rangle di Ma,M_a, possiamo imparare rr attraverso la stima di fase, a patto di utilizzare un numero di qubit di controllo sufficiente per farlo con sufficiente precisione. Purtroppo non è facile mettere le mani sull'autovettore ψ1,\vert\psi_1\rangle, e quindi dobbiamo capire come procedere.

Supponiamo momentaneamente di procedere come sopra, ma con l'autovettore ψk\vert\psi_k\rangle al posto di ψ1,\vert\psi_1\rangle, per qualsiasi scelta di k{0,,r1}k\in\{0,\ldots,r-1\} che decidiamo di pensare. Il risultato che si ottiene dalla procedura di stima della fase sarà un'approssimazione

y2mkr.\frac{y}{2^m} \approx \frac{k}{r}.

Partendo dal presupposto che non conosciamo né kkr,r,, questo potrebbe o meno permetterci di identificare r.r. Ad esempio, se k=0k = 0 otteniamo un'approssimazione da y/2my/2^m a 0,0, che purtroppo non ci dice nulla. Questo, tuttavia, è un caso insolito; per altri valori di k,k, saremo almeno in grado di imparare qualcosa su r.r.

Possiamo utilizzare un algoritmo noto come algoritmo della frazione continua per trasformare la nostra approssimazione y/2my/2^m in frazioni vicine, inclusa k/rk/r se l'approssimazione è sufficientemente buona. Non spiegheremo qui l'algoritmo della frazione continua. Invece, ecco una dichiarazione di un fatto noto su questo algoritmo.

Fact

Dato un intero N2N\geq 2 e un numero reale α(0,1),\alpha\in(0,1), esiste al massimo una scelta di interi u,v{0,,N1}u,v\in\{0,\ldots,N-1\} con v0v\neq 0 e gcd(u,v)=1\gcd(u,v)=1 soddisfacenti αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dati α\alpha e N,N, l' algoritmo delle frazioni continue trova uu e v,v, o segnala che non esistono. Questo algoritmo può essere implementato come un circuito booleano di dimensione O((lg(N))3).O((\operatorname{lg}(N))^3).

Se abbiamo un'approssimazione molto stretta di y/2my/2^m a k/r,k/r, ed eseguiamo l'algoritmo della frazione continua per NN e α=y/2m,\alpha = y/2^m, otterremo uu e v,v, come sono descritti nel fatto. L'analisi del fatto ci permette di concludere che

uv=kr.\frac{u}{v} = \frac{k}{r}.

Si noti in particolare che non impariamo necessariamente kk e r,r, ma solo k/rk/r nei termini più bassi.

Per esempio, come abbiamo già notato, non impareremo nulla da k=0.k=0. Ma questo è l'unico valore di kk in cui ciò accade. Quando kk è non nullo, potrebbe avere fattori comuni con r,r, ma il numero vv che otteniamo dall'algoritmo delle frazioni continue deve almeno dividere r.r.

È tutt'altro che ovvio, ma è vero che se abbiamo la capacità di imparare uu e vv per u/v=k/ru/v = k/r per k{0,,r1}k\in\{0,\ldots,r-1\} scelti uniformemente a caso, allora è molto probabile che siamo in grado di recuperare rr dopo pochi campioni. In particolare, se la nostra ipotesi per rr è il multiplo meno comune di tutti i valori del denominatore vv che osserviamo, avremo ragione con alta probabilità. Intuitivamente, alcuni valori di kk non vanno bene perché condividono fattori comuni con r,r, e questi fattori comuni ci vengono nascosti quando impariamo a conoscere uu e v.v. Ma le scelte casuali di kk non possono nascondere a lungo i fattori di rr e la probabilità di non indovinare rr correttamente prendendo il minimo comune multiplo dei denominatori osservati diminuisce esponenzialmente con il numero di campioni.

Rimane da affrontare il problema di come mettere le mani su un autovettore ψk\vert\psi_k\rangle di MaM_a su cui eseguire la procedura di stima della fase. In realtà non abbiamo bisogno di crearli!

Si eseguirà invece la procedura di stima della fase sullo stato 1,\vert 1\rangle,, intendendo con questo termine la codifica binaria a nn bit del numero 1,1, al posto di un autovettore ψ\vert\psi\rangle di Ma.M_a. Finora abbiamo parlato solo di eseguire la procedura di stima della fase su un particolare autovettore, ma nulla ci impedisce di eseguire la procedura su uno stato di ingresso che non sia un autovettore di Ma,M_a, ed è quello che stiamo facendo qui con lo stato 1.\vert 1\rangle. (Questo non è un autovettore di MaM_a, a meno che a=1,a=1, non sia una scelta che ci interessa)

La ragione per cui si sceglie lo stato 1\vert 1\rangle al posto di un autovettore di MaM_a è che la seguente equazione è vera.

1=1rk=0r1ψk\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

Un modo per verificare questa equazione è quello di confrontare i prodotti interni dei due lati con ogni stato base standard, utilizzando le formule menzionate in precedenza nella lezione per aiutare a valutare i risultati per il lato destro. Di conseguenza, otterremo esattamente gli stessi risultati di misurazione che avremmo ottenuto se avessimo scelto k{0,,r1}k\in\{0,\ldots,r-1\} in modo uniformemente casuale e utilizzato ψk\vert\psi_k\rangle come autovalore.

In dettaglio, immaginiamo di eseguire la procedura di stima della fase con lo stato 1\vert 1\rangle al posto di uno degli autovettori ψk.\vert\psi_k\rangle. Dopo aver eseguito la trasformata quantistica inversa di Fourier, si ottiene lo stato

1rk=0r1ψkγk,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

Dove

γk=12my=02m1x=02m1e2πix(k/ry/2m)y.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

Il vettore γk\vert\gamma_k\rangle rappresenta lo stato dei qubit top mm dopo che su di essi è stata eseguita l'inversa della trasformata quantistica di Fourier.

Quindi, in virtù del fatto che {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} è un insieme ortonormale, troviamo che una misura dei qubit superiori mm produce un'approssimazione al valore dove è scelto in modo uniforme e casuale produce un'approssimazione y/2my/2^m al valore k/rk/r dove k{0,,r1}k\in\{0,\ldots,r-1\} è scelto uniformemente a caso. Come abbiamo già detto, questo ci permette di imparare rr con un alto grado di confidenza dopo diverse esecuzioni indipendenti, che era il nostro obiettivo.

Costo totale

Il costo per l'implementazione di ogni operazione controllata-unitaria MakM_a^k è O(n2).O(n^2). Ci sono mm operazioni controllate-unitarie, e abbiamo m=O(n),m = O(n), quindi il costo totale per le operazioni controllate-unitarie è O(n3).O(n^3). Inoltre, abbiamo mm porte di Hadamard (che contribuiscono O(n)O(n) al costo) e la trasformata quantistica di Fourier inversa contribuisce O(n2)O(n^2) al costo. In questo modo, il costo delle operazioni controllate-unitarie domina il costo dell'intera procedura - che quindi è O(n3).O(n^3).

Oltre al circuito quantistico stesso, ci sono alcuni calcoli classici che devono essere eseguiti lungo il percorso. Questo include il calcolo delle potenze aka^k in ZN\mathbb{Z}_N per k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1},, necessarie per creare le porte unitarie controllate, nonché l'algoritmo della frazione continua che converte le approssimazioni di θ\theta in frazioni. Queste computazioni possono essere eseguite da circuiti booleani con un costo totale di O(n3).O(n^3).

Come è tipico, tutti questi limiti possono essere migliorati utilizzando algoritmi asintoticamente veloci; questi limiti presuppongono l'utilizzo di algoritmi standard per le operazioni aritmetiche di base.


Factoring su ordine trovato

L'ultima cosa da discutere è il modo in cui la soluzione del problema della ricerca dell'ordine ci aiuta a fattorizzare. Questa parte è completamente classica e non ha nulla a che fare con l'informatica quantistica.

Ecco l'idea di base. Vogliamo fattorizzare il numero N,N, e possiamo farlo in modo ricorsivo. In particolare, possiamo concentrarci sul compito di dividere N,N,, che significa trovare due interi b,c2b,c\geq 2 per i quali è un numero primo N=bc.N = bc. Questo non è possibile se NN è un numero primo, ma possiamo verificare in modo efficiente se NN è primo usando prima un algoritmo di verifica della primalità, e se NN non è primo proveremo a dividerlo. Una volta diviso N,N, possiamo semplicemente ricorreggere su bb e cc fino a quando tutti i nostri fattori sono primi e otteniamo la fattorizzazione prima di N.N.

Dividere i numeri interi pari è facile: basta produrre 22 e N/2.N/2.

È anche facile dividere le potenze perfette, cioè i numeri della forma N=sjN = s^j per i numeri interi s,j2,s,j\geq 2, semplicemente approssimando le radici e così via, e controllando i numeri interi vicini come sospetti per le potenze perfette approssimando le radici N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, e così via, e verificando i numeri interi vicini come sospetti per s.s. Non abbiamo bisogno di andare oltre log(N)\log(N) passi in questa sequenza, perché a quel punto la radice scende sotto 22 e non rivelerà ulteriori candidati.

È bene poter fare entrambe le cose, perché la ricerca dell'ordine non ci aiuterà a fattorizzare i numeri pari o le potenze prime, dove il numero ss è un numero primo. Se NN è dispari e non è una potenza prima, tuttavia, la ricerca dell'ordine ci permette di dividere N.N.

Probabilistic algorithm to split an odd, composite integer N that is not a prime power
  1. Scegliere a caso a{2,,N1}.a\in\{2,\ldots,N-1\}.

  2. Calcolo d=gcd(a,N).d=\gcd(a,N).

  3. Se d>1d > 1, allora emette b=db = d e c=N/dc = N/d e si ferma. Altrimenti, proseguire con il passo successivo sapendo che aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Sia rr l'ordine di aa modulo N.N. (qui è necessario trovare un ordine)

  5. Se rr è pari:

    5.1 Calcolo di x=ar/21x = a^{r/2} - 1 modulo NN \ 5.2 Calcolare d=gcd(x,N).d = \gcd(x,N). \ 5.3 Se d>1d>1, allora produce b=db=d e c=N/dc = N/d e si ferma.

  6. Se si raggiunge questo punto, l'algoritmo non è riuscito a trovare un fattore di N.N.

Un'esecuzione di questo algoritmo può fallire nel trovare un fattore di N.N. In particolare, ciò accade in due situazioni:

  • L'ordine di aa modulo NN è dispari.
  • L'ordine di aa modulo NN è pari e gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Utilizzando la teoria dei numeri di base si può dimostrare che, per una scelta casuale di a,a, con probabilità almeno 1/21/2, nessuno di questi eventi si verifica. Infatti, la probabilità che si verifichi uno dei due eventi è al massimo 2(m1)2^{-(m-1)} per mm che è il numero di fattori primi distinti di N,N, ed è per questo che è necessaria l'ipotesi che NN non sia una potenza prima. (Perché questo fatto sia vero è necessaria anche l'ipotesi che NN sia dispari)

Ciò significa che ogni esecuzione ha almeno il 50% di probabilità di dividere N.N. Pertanto, se eseguiamo l'algoritmo tt volte, scegliendo casualmente aa ogni volta, riusciremo a dividere NN con una probabilità di almeno 12t.1 - 2^{-t}.

L'idea di base dell'algoritmo è la seguente. Se abbiamo una scelta di aa per la quale l'ordine rr di aa modulo NN è pari, allora r/2r/2 è un intero e possiamo considerare i numeri

ar/21  (mod  N)andar/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{and} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

Utilizzando la formula Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), si conclude che

(ar/21)(ar/2+1)=ar1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

Ora, sappiamo che ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 per la definizione di ordine - che è un altro modo di dire che NN divide uniformemente ar1.a^r - 1. Ciò significa che NN divide uniformemente il prodotto

(ar/21)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

Perché questo sia vero, tutti i fattori primi di NN devono essere anche fattori primi di ar/21a^{r/2} - 1 o ar/2+1a^{r/2} + 1 (o di entrambi) - e per una selezione casuale di aa risulta improbabile che tutti i fattori primi di NN dividano uno dei termini e nessuno divida l'altro. Altrimenti, se alcuni dei fattori primi di NN dividono il primo termine e alcuni dividono il secondo termine, saremo in grado di trovare un fattore non banale di NN calcolando il GCD con il primo termine.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.