Skip to main content
IBM Quantum Platform

Algoritmo de Shor

Ahora nos centraremos en el problema de la factorización entera y veremos cómo puede resolverse de forma eficiente en un ordenador cuántico utilizando la estimación de fase. El algoritmo que obtendremos es el algoritmo de Shor para la factorización de enteros. Shor no describió su algoritmo específicamente en términos de estimación de fase, pero es una forma natural e intuitiva de explicar cómo funciona.

Empezaremos analizando un problema intermedio conocido como el problema de búsqueda de órdenes y veremos cómo la estimación de fase proporciona una solución a este problema. A continuación veremos cómo una solución eficiente al problema de búsqueda de órdenes nos da una solución eficiente al problema de factorización de enteros. (Cuando la solución a un problema proporciona una solución a otro problema como éste, decimos que el segundo problema se reduce al primero - así que en este caso estamos reduciendo la factorización entera a la búsqueda de órdenes) Esta segunda parte del algoritmo de Shor no hace uso de la computación cuántica en absoluto; es completamente clásica. La computación cuántica sólo es necesaria para resolver la búsqueda de órdenes.


El problema de la búsqueda de pedidos

Algunos conceptos básicos de teoría de números

Para explicar el problema de la búsqueda de órdenes y cómo se puede resolver utilizando la estimación de fase, será útil empezar con un par de conceptos básicos de teoría de números e introducir algunas notaciones útiles por el camino.

Para empezar, para cualquier número entero positivo dado N,N, defina el conjunto ZN\mathbb{Z}_N de la siguiente manera.

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

Por ejemplo, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; etc.

Son conjuntos de números, pero podemos pensar en ellos como algo más que conjuntos. En concreto, podemos pensar en operaciones aritméticas en ZN\mathbb{Z}_N, como la suma y la multiplicación, y si acordamos tomar siempre nuestras respuestas en módulo NN (es decir, dividir por NN y tomar el resto como resultado), siempre nos mantendremos dentro de este conjunto cuando realicemos estas operaciones. Las dos operaciones específicas de suma y multiplicación, ambas tomadas módulo N,N, convierten ZN\mathbb{Z}_N en un anillo, que es un tipo de objeto fundamentalmente importante en álgebra.

Por ejemplo, 33 y 55 son elementos de Z7,\mathbb{Z}_7, y si los multiplicamos entre sí obtenemos 35=15,3\cdot 5 = 15, que deja un resto de 11 al dividirlo por 7.7. A veces expresamos esto de la siguiente manera

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

Pero también podemos escribir simplemente 35=1,3 \cdot 5 = 1,, siempre que quede claro que estamos trabajando en Z7,\mathbb{Z}_7,, para que nuestra notación sea lo más sencilla posible.

Como ejemplo, aquí están las tablas de sumar y multiplicar para 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}

Entre los NN elementos de ZN,\mathbb{Z}_N, los elementos aZNa\in\mathbb{Z}_N que satisfacen gcd(a,N)=1\gcd(a,N) = 1 son especiales. Con frecuencia, el conjunto que contiene estos elementos se denota con una estrella, como en el caso anterior.

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

Si centramos nuestra atención en la operación de multiplicación, el conjunto ZN\mathbb{Z}_N^{\ast} forma un grupo -concretamente un grupo abeliano-, que es otro tipo de objeto importante en álgebra. Es un hecho básico sobre estos conjuntos (y grupos finitos en general), que si escogemos cualquier elemento aZNa\in\mathbb{Z}_N^{\ast} y multiplicamos repetidamente aa a sí mismo, siempre obtendremos eventualmente el número 1.1.

Para un primer ejemplo, tomemos N=6.N=6. Tenemos que 5Z65\in\mathbb{Z}_6^{\ast} porque gcd(5,6)=1,\gcd(5,6) = 1, y si multiplicamos 55 a sí mismo obtenemos 1,1, como confirma la tabla anterior.

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

Como segundo ejemplo, tomemos N=21.N = 21. Si recorremos los números de 00 a 20,20, los que tienen DGC igual a 11 con 2121 son los siguientes.

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\}

Para cada uno de estos elementos, es posible elevar ese número a una potencia entera positiva para obtener 1.1. Estas son las potencias más pequeñas para las que esto funciona:

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, estamos trabajando en Z21\mathbb{Z}_{21} para todas estas ecuaciones, que no nos hemos molestado en escribir: las damos por implícitas para no complicar las cosas. Seguiremos haciéndolo durante el resto de la lección.

Descripción del problema y relación con la estimación de fase

Ahora podemos plantear el problema de búsqueda de órdenes.

Order finding

Entrada: enteros positivos NN y aa que satisfagan gcd(N,a)=1\gcd(N,a) = 1\ Salida: el menor entero positivo rr tal que ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternativamente, en términos de la notación que acabamos de introducir más arriba, se nos da aZN,a \in \mathbb{Z}_N^{\ast}, y buscamos el menor número entero positivo rr tal que ar=1.a^r = 1. Este número rr se llama el orden de aa módulo N.N.

Para conectar el problema de búsqueda de orden con la estimación de fase, pensemos en la operación definida sobre un sistema cuyos estados clásicos corresponden a ZN,\mathbb{Z}_N, donde multiplicamos por un elemento fijo 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$)}

Para que quede claro, estamos haciendo la multiplicación en ZN,\mathbb{Z}_N, por lo que está implícito que estamos tomando el producto módulo NN dentro de la cometa en el lado derecho de la ecuación.

Por ejemplo, si tomamos N=15N = 15 y a=2,a=2, entonces la acción de M2M_2 sobre la base estándar {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} es la siguiente.

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}

Esta es una operación unitaria siempre que gcd(a,N)=1;\gcd(a,N)=1; baraje los elementos de la base estándar {0,,N1},\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, por lo que como matriz es una matriz de permutación. Es evidente por su definición que esta operación es determinista, y una forma sencilla de ver que es invertible es pensar en el orden rr de aa módulo N,N, y reconocer que la inversa de MaM_a es 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}

Hay otra manera de pensar en la inversa que no requiere ningún conocimiento de rr (que, después de todo, es lo que estamos tratando de calcular). Para cada elemento aZNa\in\mathbb{Z}_N^{\ast} siempre hay un único elemento bZNb\in\mathbb{Z}_N^{\ast} que satisface ab=1.ab=1. Denotamos este elemento bb por a1,a^{-1}, y puede ser calculado eficientemente; una extensión del algoritmo GCD de Euclides lo hace con un coste cuadrático en lg(N).\operatorname{lg}(N). Y así

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

Así pues, la operación MaM_a es a la vez determinista e invertible. Eso implica que está descrita por una matriz de permutación y, por tanto, es unitaria.

Pensemos ahora en los vectores y valores propios de la operación Ma,M_a, suponiendo que aZN.a\in\mathbb{Z}_N^{\ast}. Como se acaba de argumentar, esta suposición nos dice que MaM_a es unitaria.

Hay NN valores propios de Ma,M_a,, incluido posiblemente el mismo valor propio repetido varias veces, y en general hay cierta libertad a la hora de seleccionar los vectores propios correspondientes, pero no tendremos que preocuparnos por todas las posibilidades. Empecemos de forma sencilla e identifiquemos sólo un vector propio de 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}}

El número rr es el orden de aa módulo N,N, aquí y en el resto de la lección. El valor propio asociado a este vector propio es 11 porque no cambia cuando multiplicamos por 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

Esto sucede porque ar=1,a^r = 1, por lo que cada estado base estándar ak\vert a^k \rangle se desplaza a ak+1\vert a^{k+1} \rangle para kr1,k\leq r-1, y ar1\vert a^{r-1} \rangle se desplaza de nuevo a 1.\vert 1\rangle. Informalmente hablando, es como si estuviéramos agitando lentamente ψ0,\vert \psi_0 \rangle, pero ya está completamente agitado así que nada cambia.

He aquí otro ejemplo de un vector propio de Ma.M_a. Este resulta ser más interesante en el contexto de la búsqueda de orden y la estimación de 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}}

Alternativamente, podemos escribir este vector utilizando una suma de la siguiente manera.

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

Aquí vemos que el número complejo ωr=e2πi/r\omega_r = e^{2\pi i/r} aparece de forma natural, debido a la forma en que funciona la multiplicación por aa módulo N.N. Esta vez el valor propio correspondiente es ωr.\omega_r. Para ver esto, primero podemos calcular de la siguiente manera.

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

Entonces, porque ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 y ar=1=a0,\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vemos que

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,

así que Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Utilizando el mismo razonamiento, podemos identificar pares adicionales de vector propio/valor propio para Ma.M_a. Para cualquier elección de j{0,,r1}j\in\{0,\ldots,r-1\} tenemos que

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

es un vector propio de MaM_a cuyo valor propio correspondiente es ωrj.\omega_r^j.

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

Existen otros vectores propios de Ma,M_a,, pero no es necesario que nos ocupemos de ellos; nos centraremos únicamente en los vectores propios ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle que acabamos de identificar.


Búsqueda de órdenes mediante estimación de fase

Para resolver el problema de búsqueda de orden para una elección dada de aZN,a\in\mathbb{Z}_N^{\ast}, podemos aplicar el procedimiento de estimación de fase a la operación Ma.M_a.

Para ello, necesitamos implementar no sólo MaM_a eficientemente con un circuito cuántico, sino también Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, y así sucesivamente, llegando tan lejos como sea necesario para obtener una estimación suficientemente precisa del procedimiento de estimación de fase. Aquí explicaremos cómo se puede hacer, y más adelante averiguaremos exactamente cuánta precisión se necesita.

Empecemos con la operación MaM_a por sí misma. Naturalmente, como estamos trabajando con el modelo de circuito cuántico, utilizaremos notación binaria para codificar los números comprendidos entre 00 y N1.N-1. El mayor número que necesitamos codificar es N1,N-1,, por lo que el número de bits que necesitamos es

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

Por ejemplo, si en N=21N = 21 tenemos n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Este es el aspecto de la codificación de elementos de Z21\mathbb{Z}_{21} como cadenas binarias de longitud 55.

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

Y ahora, he aquí una definición precisa de cómo MaM_a se define como una operación 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}

La cuestión es que, aunque sólo nos importa cómo funciona MaM_a para 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle,, tenemos que especificar cómo funciona para el resto de estados de la base estándar 2nN2^n - N, y tenemos que hacerlo de forma que nos siga dando una operación unitaria. Esto se consigue definiendo MaM_a de forma que no afecte a los demás estados básicos estándar.

Utilizando los algoritmos para la multiplicación y división de enteros discutidos en la lección anterior, junto con la metodología para implementaciones reversibles y libres de basura de los mismos, podemos construir un circuito cuántico que realice Ma,M_a, para cualquier elección de aZN,a\in\mathbb{Z}_N^{\ast}, a coste O(n2).O(n^2). He aquí una forma de hacerlo.

  1. Construye un circuito para realizar la operación
xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

donde

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}

utilizando el método descrito en la lección anterior. Esto nos da un circuito de tamaño O(n2).O(n^2).

  1. Intercambia los dos sistemas nn -qubit utilizando nn swap gates para intercambiar los qubits individualmente.

  2. De forma similar al primer paso, construye un circuito para la operación

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

donde a1a^{-1} es la inversa de aa en ZN.\mathbb{Z}_N^{\ast}.

Inicializando los qubits inferiores nn y componiendo los tres pasos, obtenemos esta transformación:

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

El método requiere qubits de espacio de trabajo, pero al final vuelven a su estado inicial, lo que nos permite utilizar estos circuitos para la estimación de fase. El coste total del circuito que obtenemos es O(n2).O(n^2).

Para realizar Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, y así sucesivamente, podemos utilizar exactamente el mismo método, excepto que sustituimos aa por a2,a^2, a4,a^4, a8,a^8, y así sucesivamente, como elementos de ZN.\mathbb{Z}_N^{\ast}. Es decir, para cualquier potencia kk que elijamos, podemos crear un circuito para MakM_a^k no iterando kk veces el circuito para Ma,M_a, sino calculando b=akZNb = a^k \in \mathbb{Z}_N^{\ast} y luego usando el circuito para Mb.M_b.

El cálculo de potencias akZNa^k \in \mathbb{Z}_N es el problema de exponenciación modular mencionado en la lección anterior. Este cálculo se puede hacer de forma clásica, utilizando el algoritmo de exponenciación modular mencionado en la lección anterior (a menudo llamado algoritmo de potencia en la teoría computacional de números). De hecho, sólo requerimos power-of-2 potencias de a,a, en concreto a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, y podemos obtener estas potencias elevando iterativamente al cuadrado m1m-1 veces. Cada cuadratura puede realizarse mediante un circuito booleano de tamaño O(n2).O(n^2).

En esencia, lo que estamos haciendo aquí es descargar el problema de iterar MaM_a tantas como 2m12^{m-1} veces a una computación clásica eficiente. Y es una suerte que esto sea posible Para una elección arbitraria de un circuito cuántico en el problema de estimación de fase, es probable que esto no sea posible - y en ese caso el coste resultante para la estimación de fase crece exponencialmente en el número de qubits de control m.m.

Solución dada un vector propio conveniente

Para entender cómo podemos resolver el problema de búsqueda de órdenes utilizando la estimación de fase, empecemos suponiendo que ejecutamos el procedimiento de estimación de fase en la operación MaM_a utilizando el vector propio ψ1.\vert\psi_1\rangle. Conseguir este eigenvector no es fácil, así que este no será el final de la historia, pero es útil empezar por aquí.

El valor propio de MaM_a correspondiente al vector propio ψ1\vert \psi_1\rangle es

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

Es decir, ωr=e2πiθ\omega_r = e^{2\pi i \theta} para θ=1/r.\theta = 1/r. Por lo tanto, si ejecutamos el procedimiento de estimación de fase en MaM_a utilizando el vector propio ψ1,\vert\psi_1\rangle, obtendremos una aproximación a 1/r.1/r. Calculando el recíproco podremos aprender rr - siempre que nuestra aproximación sea lo suficientemente buena.

Más en detalle, cuando ejecutamos el procedimiento de estimación de fase utilizando mm qubits de control, lo que obtenemos es un número y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. A continuación, tomamos y/2my/2^m como conjetura para θ,\theta,, que es 1/r1/r en el caso que nos ocupa. Para averiguar cuál es rr a partir de esta aproximación, lo natural es calcular el recíproco de nuestra aproximación y redondear al entero más próximo.

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

Por ejemplo, supongamos r=6r = 6 y realizamos la estimación de fase en MaM_a con el vector propio ψ1\vert\psi_1\rangle utilizando los bits de control de m=5m = 5. La mejor aproximación 55 -bit a 1/r=1/61/r = 1/6 es 5/32,5/32, y tenemos bastantes posibilidades (alrededor de 68%68\% en este caso) de obtener el resultado y=5y=5 a partir de la estimación de fase. Tenemos

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

y redondeando al entero más próximo se obtiene 6,6,, que es la respuesta correcta.

Por otro lado, si no utilizamos la precisión suficiente, es posible que no obtengamos la respuesta correcta. Por ejemplo, si tomamos m=4m = 4 qubits de control en la estimación de fase, podríamos obtener la mejor aproximación de 44 -bit a 1/r=1/6,1/r = 1/6, que es 3/16.3/16. Si tomamos el recíproco obtenemos

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

y redondeando al entero más próximo se obtiene una respuesta incorrecta de 5.5.

¿Cuánta precisión necesitamos para obtener la respuesta correcta? Sabemos que el orden rr es un número entero, e intuitivamente lo que necesitamos es suficiente precisión para distinguir 1/r1/r de las posibilidades cercanas, incluyendo 1/(r+1)1/(r+1) y 1/(r1).1/(r-1). El número más cercano a 1/r1/r del que tenemos que preocuparnos es 1/(r+1),1/(r+1), y la distancia entre estos dos números es

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

Así, si queremos asegurarnos de que no confundimos 1/r1/r con 1/(r+1),1/(r+1), basta con utilizar la precisión suficiente para garantizar que una mejor aproximación y/2my/2^m a 1/r1/r está más cerca de 1/r1/r que de 1/(r+1).1/(r+1). Si utilizamos la precisión suficiente para que

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

de modo que el error sea inferior a la mitad de la distancia entre 1/r1/r y 1/(r+1),1/(r+1),, entonces y/2my/2^m estará más cerca de 1/r1/r que de cualquier otra posibilidad, incluidas 1/(r+1)1/(r+1) y 1/(r1).1/(r-1).

Podemos comprobarlo de la siguiente manera. Supongamos que

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

para ε\varepsilon satisfaciendo

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

Si tomamos el recíproco obtenemos

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}.

Maximizando en el numerador y minimizando en el denominador, podemos acotar lo lejos que estamos de rr de la siguiente manera.

ε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}

Estamos a menos de 1/21/2 de r,r, así que, como era de esperar, llegaremos a rr cuando demos la vuelta.

Por desgracia, como aún no sabemos qué es rr, no podemos utilizarlo para saber cuánta precisión necesitamos. Lo que podemos hacer en su lugar es utilizar el hecho de que rr debe ser menor que NN para asegurarnos de que utilizamos la precisión suficiente. En particular, si utilizamos la precisión suficiente para garantizar que la mejor aproximación y/2my/2^m a 1/r1/r satisface

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

entonces tendremos suficiente precisión para determinar correctamente rr cuando tomemos el recíproco. Tomando m=2lg(N)+1m = 2\operatorname{lg}(N)+1 nos aseguramos de tener una alta probabilidad de obtener una estimación con esta precisión utilizando el método descrito anteriormente. (Tomar m=2lg(N)m = 2\operatorname{lg}(N) es suficiente si nos sentimos cómodos con un límite inferior del 40% en la probabilidad de éxito)

Solución general

Como acabamos de ver, si tenemos el vector propio ψ1\vert \psi_1 \rangle de Ma,M_a, podemos aprender rr a través de la estimación de fase, siempre que utilicemos suficientes qubits de control para hacerlo con suficiente precisión. Por desgracia, no es fácil conseguir el vector propio ψ1,\vert\psi_1\rangle,, así que tenemos que averiguar cómo proceder.

Supongamos momentáneamente que procedemos igual que arriba, excepto con el vector propio ψk\vert\psi_k\rangle en lugar de ψ1,\vert\psi_1\rangle, para cualquier elección de k{0,,r1}k\in\{0,\ldots,r-1\} en la que decidamos pensar. El resultado que obtengamos del procedimiento de estimación de fase será una aproximación

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

Trabajando bajo el supuesto de que no conocemos ni kk ni r,r, esto podría o no permitirnos identificar r.r. Por ejemplo, si k=0k = 0 obtendremos una aproximación y/2my/2^m a 0,0, que desgraciadamente no nos dice nada. Sin embargo, este es un caso inusual; para otros valores de k,k, al menos podremos aprender algo sobre r.r.

Podemos utilizar un algoritmo conocido como el algoritmo de la fracción continua para convertir nuestra aproximación y/2my/2^m en fracciones cercanas - incluyendo k/rk/r si la aproximación es lo suficientemente buena. No explicaremos aquí el algoritmo de la fracción continua. En su lugar, he aquí una declaración de un hecho conocido sobre este algoritmo.

Fact

Dado un número entero N2N\geq 2 y un número real α(0,1),\alpha\in(0,1), existe a lo sumo una elección de enteros u,v{0,,N1}u,v\in\{0,\ldots,N-1\} con v0v\neq 0 y gcd(u,v)=1\gcd(u,v)=1 satisfaciendo αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dados α\alpha y N,N, el algoritmo de fracción continua encuentra uu y v,v, o informa de que no existen. Este algoritmo puede implementarse como un circuito booleano de tamaño O((lg(N))3).O((\operatorname{lg}(N))^3).

Si tenemos una aproximación muy cercana y/2my/2^m a k/r,k/r, y ejecutamos el algoritmo de fracción continua para NN y α=y/2m,\alpha = y/2^m, obtendremos uu y v,v, tal y como se describen en el hecho. El análisis del hecho permite concluir que

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

Nótese en particular que no aprendemos necesariamente kk y r,r, sólo aprendemos k/rk/r en los términos más bajos.

Por ejemplo, y como ya nos hemos dado cuenta, no vamos a aprender nada de k=0.k=0. Pero ese es el único valor de kk en el que ocurre eso. Cuando kk es distinto de cero, puede tener factores comunes con r,r, pero el número vv que obtenemos del algoritmo de la fracción continua debe al menos dividir a r.r.

Está lejos de ser obvio, pero es cierto que si tenemos la capacidad de aprender uu y vv para u/v=k/ru/v = k/r para k{0,,r1}k\in\{0,\ldots,r-1\} elegidos uniformemente al azar, entonces es muy probable que seamos capaces de recuperar rr después de unas pocas muestras. En particular, si nuestra suposición para rr es el mínimo común múltiplo de todos los valores para el denominador vv que observamos, acertaremos con alta probabilidad. Intuitivamente hablando, algunos valores de kk no son buenos porque comparten factores comunes con r,r, y esos factores comunes se nos ocultan cuando aprendemos uu y v.v. Pero no es probable que las elecciones aleatorias de kk oculten los factores de rr durante mucho tiempo, y la probabilidad de que no adivinemos rr correctamente tomando el mínimo común múltiplo de los denominadores que observamos cae exponencialmente en el número de muestras.

Queda por abordar la cuestión de cómo conseguir un vector propio ψk\vert\psi_k\rangle de MaM_a para ejecutar el procedimiento de estimación de fase. Resulta que, en realidad, no necesitamos crearlos

Lo que haremos en su lugar es ejecutar el procedimiento de estimación de fase en el estado 1,\vert 1\rangle, por el que entendemos la codificación binaria de nn -bit del número 1,1, en lugar de un eigenvector ψ\vert\psi\rangle de Ma.M_a. Hasta ahora, sólo hemos hablado de ejecutar el procedimiento de estimación de fase en un eigenvector particular, pero nada nos impide ejecutar el procedimiento en un estado de entrada que no sea un eigenvector de Ma,M_a, y eso es lo que estamos haciendo aquí con el estado 1.\vert 1\rangle. (Este no es un eigenvector de MaM_a a menos que a=1,a=1, que no es una opción que nos interese)

La razón para elegir el estado 1\vert 1\rangle en lugar de un vector propio de MaM_a es que la siguiente ecuación es cierta.

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

Una forma de verificar esta ecuación es comparar los productos internos de los dos lados con cada estado base estándar, utilizando las fórmulas mencionadas anteriormente en la lección para ayudar a evaluar los resultados del lado derecho. En consecuencia, obtendremos exactamente los mismos resultados de medición que si hubiéramos elegido k{0,,r1}k\in\{0,\ldots,r-1\} uniformemente al azar y utilizado ψk\vert\psi_k\rangle como vector propio.

Para más detalle, imaginemos que ejecutamos el procedimiento de estimación de fase con el estado 1\vert 1\rangle en lugar de uno de los vectores propios ψk.\vert\psi_k\rangle. Tras realizar la transformada cuántica de Fourier inversa, obtenemos el estado

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

donde

γ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.

El vector γk\vert\gamma_k\rangle representa el estado de los qubits superiores mm después de haberles realizado la inversa de la transformada cuántica de Fourier.

Así, en virtud del hecho de que {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} es un conjunto ortonormal, encontramos que una medición de los qubits superiores mm produce una aproximación y/2my/2^m al valor k/rk/r donde k{0,,r1}k\in\{0,\ldots,r-1\} se elige uniformemente al azar. Como ya hemos comentado, esto nos permite aprender rr con un alto grado de confianza tras varias ejecuciones independientes, que era nuestro objetivo.

Coste total

El coste de ejecución de cada operación controlada-unitaria MakM_a^k es O(n2).O(n^2). Hay mm operaciones controladas-unitarias, y tenemos m=O(n),m = O(n), por lo que el coste total de las operaciones controladas-unitarias es O(n3).O(n^3). Además, tenemos mm puertas Hadamard (que contribuyen O(n)O(n) al coste), y la transformada cuántica inversa de Fourier contribuye O(n2)O(n^2) al coste. Así pues, el coste de las operaciones controladas-unitarias domina el coste de todo el procedimiento - que es por tanto O(n3).O(n^3).

Además del propio circuito cuántico, hay que realizar algunos cálculos clásicos. Esto incluye el cálculo de las potencias aka^k en ZN\mathbb{Z}_N para k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1}, que son necesarias para crear las puertas unitarias controladas, así como el algoritmo de fracción continua que convierte las aproximaciones de θ\theta en fracciones. Estos cálculos pueden realizarse mediante circuitos booleanos con un coste total de O(n3).O(n^3).

Como es habitual, todos estos límites pueden mejorarse utilizando algoritmos asintóticamente rápidos; estos límites suponen que estamos utilizando algoritmos estándar para las operaciones aritméticas básicas.


Factoring por búsqueda de pedidos

Lo último que tenemos que discutir es cómo la resolución del problema de búsqueda de órdenes nos ayuda a factorizar. Esta parte es completamente clásica: no tiene nada que ver específicamente con la computación cuántica.

Esta es la idea básica. Queremos factorizar el número N,N, y podemos hacerlo recursivamente. En concreto, podemos centrarnos en la tarea de dividir N,N,, lo que significa encontrar dos enteros cualesquiera b,c2b,c\geq 2 para los que N=bc.N = bc. Esto no es posible si NN es un número primo, pero podemos comprobar eficientemente si NN es primo utilizando primero un algoritmo de comprobación de primalidad, y si NN no es primo intentaremos dividirlo. Una vez que dividimos N,N, podemos simplemente recurrir en bb y cc hasta que todos nuestros factores sean primos y obtengamos la factorización prima de N.N.

Dividir números enteros pares es fácil: simplemente mostramos 22 y N/2.N/2.

También es fácil dividir potencias perfectas, es decir, números de la forma N=sjN = s^j para números enteros s,j2,s,j\geq 2, con sólo aproximando las raíces N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, y así sucesivamente, y comprobando los enteros cercanos como sospechosos para s.s. No necesitamos ir más allá de log(N)\log(N) pasos en esta secuencia, porque en ese punto la raíz cae por debajo de 22 y no revelará candidatos adicionales.

Es bueno que podamos hacer estas dos cosas porque la búsqueda de orden no nos ayudará a factorizar números pares o para potencias primos, donde el número ss resulta ser primo. Sin embargo, si NN es impar y no una potencia prima, la búsqueda de orden nos permite dividir N.N.

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

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

  3. Si d>1d > 1 entonces salida b=db = d y c=N/dc = N/d y parada. De lo contrario, continúe con el siguiente paso sabiendo que aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Sea rr el orden de aa módulo N.N. (Aquí es donde necesitamos encontrar el orden.)

  5. Si rr es par:

    5.1 Calcular x=ar/21x = a^{r/2} - 1 módulo NN \ 5.2 Calcular d=gcd(x,N).d = \gcd(x,N). \ 5.3 Si d>1d>1 entonces salida b=db=d y c=N/dc = N/d y parada.

  6. Si se alcanza este punto, el algoritmo no ha conseguido encontrar un factor de N.N.

Una ejecución de este algoritmo puede no encontrar un factor de N.N. Concretamente, esto ocurre en dos situaciones:

  • El orden de aa módulo NN es impar.
  • El orden de aa módulo NN es par y gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Utilizando la teoría básica de números, se puede demostrar que, para una elección aleatoria de a,a, con una probabilidad de al menos 1/21/2, no se produce ninguno de estos sucesos. De hecho, la probabilidad de que ocurra cualquiera de los dos sucesos es como máximo 2(m1)2^{-(m-1)}, siendo mm el número de factores primos distintos de N,N, por lo que es necesario suponer que NN no es una potencia prima. (La suposición de que NN es impar también es necesaria para que este hecho sea cierto)

Esto significa que cada ejecución tiene al menos un 50% de probabilidades de dividir N.N. Por lo tanto, si ejecutamos el algoritmo tt veces, eligiendo aleatoriamente aa cada vez, conseguiremos dividir NN con una probabilidad de al menos 12t.1 - 2^{-t}.

La idea básica del algoritmo es la siguiente. Si tenemos una elección de aa para la cual el orden rr de aa módulo NN es par, entonces r/2r/2 es un número entero y podemos considerar los números

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).

Utilizando la fórmula Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), concluimos que

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

Ahora, sabemos que ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 por la definición del orden - que es otra manera de decir que NN divide uniformemente a ar1.a^r - 1. Eso significa que NN divide uniformemente el producto

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

Para que esto sea cierto, todos los factores primos de NN deben ser también factores primos de ar/21a^{r/2} - 1 o ar/2+1a^{r/2} + 1 (o ambos) - y para una selección aleatoria de aa resulta improbable que todos los factores primos de NN dividan uno de los términos y ninguno divida el otro. En caso contrario, siempre que algunos de los factores primos de NN dividan al primer término y otros dividan al segundo, podremos encontrar un factor no trivial de NN calculando el DGC con el primer término.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.