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 NN, definimos el conjunto ZN\mathbb{Z}_N de la siguiente manera.

ZN={0,1,…,N−1}\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 considerarlos como algo más que simples 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 nuestros resultados módulo NN (es decir, dividir entre NN y considerar el resto como resultado), siempre nos mantendremos dentro de este conjunto al realizar estas operaciones. Las dos operaciones específicas de suma y multiplicación, ambas realizadas módulo NN, convierten ZN\mathbb{Z}_N en un anillo, que es un tipo de objeto de importancia fundamental en álgebra.

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

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

Pero también podemos escribir simplemente « 3⋅5=13 \cdot 5 = 1 », siempre que haya quedado claro que estamos trabajando en « Z7\mathbb{Z}_7 », con el fin de que nuestra notación sea lo más sencilla posible.

A modo de ejemplo, aquí están las tablas de suma y multiplicación de Z6\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321\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 elementos NN de ZN\mathbb{Z}_N, los elementos a∈ZNa\in\mathbb{Z}_N que cumplen gcd⁡(a,N)=1\gcd(a,N) = 1 son especiales. A menudo, el conjunto que contiene estos elementos se denota con un asterisco, como se muestra aquí.

ZN∗={a∈ZN: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 la multiplicación, el conjunto ZN∗\mathbb{Z}_N^{\ast} forma un grupo —concretamente, un grupo abeliano—, que es otro tipo importante de objeto en álgebra. Es un hecho básico de estos conjuntos (y de los grupos finitos en general) que, si elegimos cualquier elemento a∈ZN∗a\in\mathbb{Z}_N^{\ast} y multiplicamos repetidamente aa por sí mismo, siempre acabaremos obteniendo el número 11.

Como primer ejemplo, tomemos N=6N=6. Tenemos que 5∈Z6∗5\in\mathbb{Z}_6^{\ast} porque gcd⁡(5,6)=1\gcd(5,6) = 1, y si multiplicamos 55 por sí mismo obtenemos 11, tal y 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=21N = 21. Si repasamos los números desde 00 hasta 2020, los que tienen un MCD 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 un número de 11 e. Estas son las potencias mínimas 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 ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N)

Por otra parte, según la notación que acabamos de introducir, se nos da un número a∈ZN∗a \in \mathbb{Z}_N^{\ast} y buscamos el menor entero positivo rr tal que ar=1a^r = 1. Este número rr se denomina orden de aa módulo NN.

Para relacionar el problema de la determinación del orden con la estimación de fase, pensemos en la operación definida en un sistema cuyos estados clásicos corresponden a ZN\mathbb{Z}_N, donde multiplicamos por un elemento fijo a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

Ma∣x⟩=∣ax⟩(for each x∈ZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(for each $x\in\mathbb{Z}_N$)}

Para que quede claro, estamos realizando la multiplicación en « ZN\mathbb{Z}_N », por lo que queda implícito que estamos tomando el producto módulo « NN » dentro del ket que aparece en el lado derecho de la ecuación.

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

M2∣0⟩=∣0⟩M2∣5⟩=∣10⟩M2∣10⟩=∣5⟩M2∣1⟩=∣2⟩M2∣6⟩=∣12⟩M2∣11⟩=∣7⟩M2∣2⟩=∣4⟩M2∣7⟩=∣14⟩M2∣12⟩=∣9⟩M2∣3⟩=∣6⟩M2∣8⟩=∣1⟩M2∣13⟩=∣11⟩M2∣4⟩=∣8⟩M2∣9⟩=∣3⟩M2∣14⟩=∣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}

Se trata de una operación unitaria siempre que gcd⁡(a,N)=1\gcd(a,N)=1; mezcla los elementos de la base estándar {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, por lo que, como matriz, es una matriz de permutación. De su definición se desprende que esta operación es determinista, y una forma sencilla de comprobar que es invertible es pensar en el orden rr de aa módulo NN, y darse cuenta de que la inversa de MaM_a es Mar−1M_a^{r-1}.

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

Hay otra forma de plantearse la inversa que no requiere ningún conocimiento de « rr » (que, al fin y al cabo, es lo que estamos intentando calcular). Para cada elemento a∈ZN∗a\in\mathbb{Z}_N^{\ast} siempre existe un elemento único b∈ZN∗b\in\mathbb{Z}_N^{\ast} que satisface ab=1ab=1. Denotamos este elemento bb por a−1a^{-1}, y puede calcularse de forma eficiente; una extensión del algoritmo del MCD de Euclides lo hace con un coste cuadrático en lg⁡(N)\operatorname{lg}(N). Y, por lo tanto,

Ma−1Ma=Ma−1a=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.

Ahora pensemos en los vectores propios y los valores propios de la operación MaM_a, suponiendo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}. Como acabamos de ver, esta suposición nos indica que MaM_a es unitaria.

Hay NN valores propios de MaM_a, entre los que puede figurar el mismo valor propio repetido varias veces, y, en general, existe cierta libertad a la hora de seleccionar los vectores propios correspondientes; pero no tendremos que preocuparnos por todas las posibilidades. Empecemos por algo sencillo e identifiquemos un solo vector propio de MaM_a.

∣ψ0⟩=∣1⟩+∣a⟩+⋯+∣ar−1⟩r\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 NN, tanto aquí como en el resto de la lección. El valor propio asociado a este vector propio es 11, ya que no varía al multiplicarlo por aa.

Ma∣ψ0⟩=∣a⟩+⋯+∣ar−1⟩+∣ar⟩r=∣a⟩+⋯+∣ar−1⟩+∣1⟩r=∣ψ0⟩M_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 ocurre porque ar=1a^r = 1, por lo que cada estado de la base estándar ∣ak⟩\vert a^k \rangle se desplaza a ∣ak+1⟩\vert a^{k+1} \rangle para k≤r−1k\leq r-1, y ∣ar−1⟩\vert a^{r-1} \rangle vuelve a situarse en ∣1⟩\vert 1\rangle. Hablando de manera informal, es como si estuviéramos removiendo lentamente ∣ψ0⟩\vert \psi_0 \rangle, pero ya está completamente removido, por lo que no cambia nada.

He aquí otro ejemplo de vector propio de MaM_a. Este resulta ser más interesante en el contexto de la determinación del orden y la estimación de fase.

∣ψ1⟩=∣1⟩+ωr−1∣a⟩+⋯+ωr−(r−1)∣ar−1⟩r\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⟩=1r∑k=0r−1ωr−k∣ak⟩\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Aquí vemos cómo aparece de forma natural el número complejo ωr=e2πi/r\omega_r = e^{2\pi i/r}, debido a la forma en que funciona la multiplicación por aa módulo NN. En esta ocasión, el valor propio correspondiente es ωr\omega_r. Para comprobarlo, podemos realizar primero el siguiente cálculo.

Ma∣ψ1⟩=1r∑k=0r−1ωr−kMa∣ak⟩=1r∑k=0r−1ωr−k∣ak+1⟩=1r∑k=1rωr−(k−1)∣ak⟩=1rωr∑k=1rωr−k∣ak⟩M_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, dado que ωr−r=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

1r∑k=1rωr−k∣ak⟩=1r∑k=0r−1ωr−k∣ak⟩=∣ψ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.

Siguiendo el mismo razonamiento, podemos identificar otros pares de vectores propios y valores propios para MaM_a. Para cualquier elección de j∈{0,…,r−1}j\in\{0,\ldots,r-1\}, se tiene que

∣ψj⟩=1r∑k=0r−1ωr−jk∣ak⟩\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∣ψj⟩M_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Hay otros vectores propios de MaM_a, pero no es necesario que nos ocupemos de ellos; nos centraremos únicamente en los vectores propios ∣ψ0⟩,…,∣ψr−1⟩\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 a∈ZN∗a\in\mathbb{Z}_N^{\ast}, podemos aplicar el procedimiento de estimación de fase a la operación MaM_a.

Para ello, debemos implementar de forma eficiente no solo MaM_a con un circuito cuántico, sino también Ma2M_a^2, Ma4M_a^4, Ma8M_a^8, y así sucesivamente, llegando tan lejos como sea necesario para obtener una estimación lo suficientemente precisa a partir del procedimiento de estimación de fase. Aquí explicaremos cómo se puede hacer esto y, más adelante, determinaremos exactamente cuánta precisión se necesita.

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

n=lg⁡(N−1)=⌊log⁡(N−1)⌋+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Por ejemplo, si N=21N = 21, tenemos n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5. Así es como se ve la codificación de los elementos de Z21\mathbb{Z}_{21} como cadenas binarias de longitud 55.

0↦000001↦00001⋮20↦10100\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.

Ma∣x⟩={∣ax  (mod  N)⟩0≤x<N∣x⟩N≤x<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 solo nos interese cómo funciona MaM_a para ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle, sí que tenemos que especificar cómo funciona para el resto de los estados de la base estándar 2n−N2^n - N, y debemos hacerlo de tal forma que siga dándonos una operación unitaria. Esto se consigue definiendo MaM_a de tal forma que no realice ninguna acción sobre los estados restantes de la base estándar.

Utilizando los algoritmos de multiplicación y división de números enteros que se han tratado en la lección anterior, junto con la metodología para su implementación reversible y sin residuos, podemos construir un circuito cuántico que realice un MaM_a para cualquier elección de a∈ZN∗a\in\mathbb{Z}_N^{\ast}, con un coste de O(n2)O(n^2). A continuación se muestra una forma de hacerlo.

  1. Construye un circuito para realizar la operación
∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

donde

fa(x)={ax  (mod  N)0≤x<NxN≤x<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

∣x⟩∣y⟩↦∣x⟩∣y⊕fa−1(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

donde a−1a^{-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:

∣x⟩∣0n⟩↦step 1∣x⟩∣fa(x)⟩↦step 2∣fa(x)⟩∣x⟩↦step 3∣fa(x)⟩∣x⊕fa−1(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 del espacio de trabajo, pero al final se restablecen 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 de O(n2)O(n^2).

Para realizar Ma2M_a^2, Ma4M_a^4, Ma8M_a^8, etc., podemos utilizar exactamente el mismo método, salvo que sustituimos aa por a2a^2, a4a^4, a8a^8, etc., 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 MaM_a, sino calculando b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} y utilizando luego el circuito para MbM_b.

El cálculo de potencias ak∈ZNa^k \in \mathbb{Z}_N es el problema de la exponenciación modular mencionado en la lección anterior. Este cálculo se puede realizar de forma clásica, utilizando el algoritmo de exponenciación modular mencionado en la lección anterior (que en teoría computacional de números se suele denominar «algoritmo de potencias»). De hecho, solo necesitamos potencias de power-of-2 de aa, en concreto a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, y podemos obtener estas potencias elevando al cuadrado de forma iterativa m−1m-1 veces. Cada elevación al cuadrado puede realizarse mediante un circuito booleano de tamaño O(n2)O(n^2).

En esencia, lo que estamos haciendo aquí es delegar el problema de iterar « MaM_a » tantas veces como « 2m−12^{m-1} » a un cálculo clásico eficiente. ¡Y qué suerte que esto sea posible! Si se elige un circuito cuántico cualquiera en el problema de la estimación de fase, es poco probable que esto sea posible; y, en ese caso, el coste resultante de la estimación de fase crece exponencialmente con el número de qubits de control mm.

Solución dada un vector propio conveniente

Para entender cómo podemos resolver el problema de la búsqueda del orden mediante la estimación de fase, empecemos suponiendo que aplicamos el procedimiento de estimación de fase a la operación MaM_a utilizando el vector propio ∣ψ1⟩\vert\psi_1\rangle. Resulta que no es fácil conseguir este vector propio, así que esto 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. Así pues, si aplicamos el procedimiento de estimación de fase a MaM_a utilizando el vector propio ∣ψ1⟩\vert\psi_1\rangle, obtendremos una aproximación a 1/r1/r. Al calcular el recíproco, podremos obtener rr, siempre que nuestra aproximación sea lo suficientemente buena.

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

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

Por ejemplo, supongamos que r=6r = 6 y realizamos la estimación de fase en MaM_a con el vector propio ∣ψ1⟩\vert\psi_1\rangle utilizando m=5m = 5 bits de control. La mejor aproximación de 55 -bit a 1/r=1/61/r = 1/6 es 5/325/32, y tenemos muchas posibilidades (aproximadamente 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, al redondear al entero más cercano, se obtiene « 66 », 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 un m=4m = 4 qubits de control en la estimación de fase, podríamos obtener la mejor aproximación de 44 bits a 1/r=1/61/r = 1/6, que es 3/163/16. Tomando el recíproco se obtiene

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

y, al redondear al entero más cercano, se obtiene una respuesta incorrecta de 55.

Entonces, ¿qué grado de precisión necesitamos para obtener la respuesta correcta? Sabemos que el orden rr es un número entero y, intuitivamente, lo que necesitamos es suficiente precisión para distinguir 1/r1/r de otras posibilidades cercanas, como 1/(r+1)1/(r+1) y 1/(r−1)1/(r-1). El número más cercano a 1/r1/r que debemos tener en cuenta es 1/(r+1)1/(r+1), y la distancia entre estos dos números es

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

Por lo tanto, si queremos asegurarnos de no confundir 1/r1/r con 1/(r+1)1/(r+1), basta con utilizar la precisión suficiente para garantizar que la 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

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

De modo que, si el error es 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/(r−1)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+εr∣≤r22r(r+1)1−r2r(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 rr, así que, como era de esperar, al redondear obtendremos rr.

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

∣y2m−1r∣≤12N2,\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 disponemos del vector propio ∣ψ1⟩\vert \psi_1 \rangle de MaM_a, podemos determinar rr mediante la estimación de fase, siempre y cuando utilicemos suficientes qubits de control para hacerlo con la precisión necesaria. Por desgracia, no es fácil conseguir el vector propio ∣ψ1⟩\vert\psi_1\rangle, así que tenemos que averiguar cómo proceder.

Supongamos por un momento que procedemos tal y como se ha indicado anteriormente, salvo que utilizamos el vector propio ∣ψk⟩\vert\psi_k\rangle en lugar de ∣ψ1⟩\vert\psi_1\rangle, para cualquier elección de k∈{0,…,r−1}k\in\{0,\ldots,r-1\} que decidamos considerar. El resultado que obtenemos del procedimiento de estimación de fase será una aproximación

y2m≈kr.\frac{y}{2^m} \approx \frac{k}{r}.

Partiendo de la hipótesis de que no conocemos ni kk ni rr, esto podría permitirnos —o no— identificar rr. Por ejemplo, si k=0k = 0, obtendremos una aproximación y/2my/2^m a 00, lo que, por desgracia, no nos aporta ninguna información. Sin embargo, este es un caso atípico; para otros valores de kk, al menos podremos aprender algo sobre rr.

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

Dados un número entero N≥2N\geq 2 y un número real α∈(0,1)\alpha\in(0,1), existe como máximo una opción de números enteros u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} tales que v≠0v\neq 0 y gcd⁡(u,v)=1\gcd(u,v)=1 satisfagan ∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dados α\alpha y NN, el algoritmo de fracciones continuas encuentra uu y vv, o bien indica que no existen. Este algoritmo puede implementarse como un circuito booleano de tamaño O((lg⁡(N))3)O((\operatorname{lg}(N))^3).

Si disponemos de una aproximación muy cercana y/2my/2^m a k/rk/r, y aplicamos el algoritmo de fracciones continuas a NN y α=y/2m\alpha = y/2^m, obtendremos uu y vv, tal y como se describe en el enunciado. Un análisis de los hechos nos permite concluir que

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

Fíjate, sobre todo, en que no aprendemos necesariamente que « kk » y « rr », sino que solo aprendemos que « k/rk/r » en términos más simples.

Por ejemplo, y como ya hemos observado, no vamos a aprender nada de k=0k=0. Pero ese es el único caso en el que ocurre eso en kk. Cuando kk es distinto de cero, puede tener factores comunes con rr, pero el número vv que obtenemos mediante el algoritmo de fracciones continuas debe dividir, como mínimo, a rr.

No resulta nada obvio, pero es cierto que si somos capaces de aprender uu y vv para u/v=k/ru/v = k/r para k∈{0,…,r−1}k\in\{0,\ldots,r-1\}, elegidas al azar de manera uniforme, es muy probable que podamos recuperar rr tras unas pocas muestras. En concreto, si nuestra estimación para rr es el mínimo común múltiplo de todos los valores del denominador vv que observamos, acertaremos con una alta probabilidad. Intuitivamente, algunos valores de kk no son adecuados porque comparten factores comunes con rr, y esos factores comunes nos quedan ocultos cuando aprendemos uu y vv. Sin embargo, es poco probable que las elecciones aleatorias de kk oculten durante mucho tiempo los factores de rr, y la probabilidad de que no adivinemos correctamente rr calculando el mínimo común múltiplo de los denominadores que observamos disminuye exponencialmente al aumentar 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 cambio, es aplicar el procedimiento de estimación de fase al estado ∣1⟩\vert 1\rangle, es decir, la codificación binaria de nn bits del número 11, en lugar de un vector propio ∣ψ⟩\vert\psi\rangle de MaM_a. Hasta ahora, solo hemos hablado de aplicar el procedimiento de estimación de fase a un vector propio concreto, pero nada nos impide aplicarlo a un estado de entrada que no sea un vector propio de MaM_a, y eso es lo que estamos haciendo aquí con el estado ∣1⟩\vert 1\rangle. (Esto no es un vector propio de MaM_a a menos que a=1a=1, lo cual 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⟩=1r∑k=0r−1∣ψ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,…,r−1}k\in\{0,\ldots,r-1\} uniformemente al azar y utilizado ∣ψk⟩\vert\psi_k\rangle como vector propio.

Para explicarlo con más detalle, imaginemos que aplicamos el procedimiento de estimación de fase utilizando el estado ∣1⟩\vert 1\rangle en lugar de uno de los vectores propios ∣ψk⟩\vert\psi_k\rangle. Una vez realizada la transformada de Fourier cuántica inversa, obtenemos el estado

1r∑k=0r−1∣ψk⟩∣γk⟩,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

donde

∣γk⟩=12m∑y=02m−1∑x=02m−1e2πix(k/r−y/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⟩,…,∣ψr−1⟩}\{\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,…,r−1}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 implementar cada operación « MakM_a^k » controlada-unitaria 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 de Hadamard (que aportan O(n)O(n) al coste), y la transformada de Fourier cuántica inversa aporta O(n2)O(n^2) al coste. Por lo tanto, el coste de las operaciones unitarias controladas predomina sobre el coste de todo el procedimiento, que, por lo tanto, es « O(n3)O(n^3) ».

Además del propio circuito cuántico, hay algunos cálculos clásicos que es necesario realizar a lo largo del proceso. Esto incluye el cálculo de las potencias aka^k en ZN\mathbb{Z}_N para k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1}, necesarias para crear las puertas unitarias controladas, así como el algoritmo de fracciones continuas 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 NN, y podemos hacerlo de forma recursiva. En concreto, podemos centrarnos en la tarea de factorizar NN, lo que significa encontrar dos números enteros cualesquiera b,c≥2b,c\geq 2 para los que N=bcN = bc. Esto no es posible si NN es un número primo, pero primero podemos comprobar de forma eficiente si NN es primo utilizando un algoritmo de prueba de primalidad y, si NN no es primo, intentaremos factorizarlo. Una vez que hayamos dividido NN, basta con aplicar la recursividad a bb y cc hasta que todos nuestros factores sean primos y obtengamos la factorización en números primos de NN.

Dividir números enteros pares es fácil: solo tenemos que mostrar « 22 » y « N/2N/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,j≥2s,j\geq 2, simplemente aproximando las raíces N1/2N^{1/2}, N1/3N^{1/3}, N1/4N^{1/4}, y así sucesivamente, y comprobando los números enteros cercanos como posibles candidatos para ss. No es necesario avanzar más allá de log⁡(N)\log(N) pasos en esta secuencia, ya que en ese punto la raíz cae por debajo de 22 y no revelará candidatos adicionales.

Es bueno que podamos hacer ambas cosas, porque la búsqueda de orden no nos servirá para factorizar números pares ni potencias de números primos, en los que el número ss resulta ser primo. Sin embargo, si NN es impar y no es una potencia de un número primo, la determinación del orden nos permite dividir NN.

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

  2. Calcula d=gcd⁡(a,N)d=\gcd(a,N).

  3. Si d>1d > 1, entonces muestra b=db = d y c=N/dc = N/d y detente. De lo contrario, pasa al siguiente paso sabiendo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

  4. Sea rr el orden de aa módulo NN. (Aquí es donde necesitamos la búsqueda de pedidos.)

  5. Si rr es par:

    5.1 Calculax=ar/2−1x = a^{r/2} - 1 móduloNN

    5.2
    Calculad=gcd⁡(x,N)d = \gcd(x,N) . 5.3
    Sid>1d>1 , entonces muestrab=db=d yc=N/dc = N/d y detén el programa.

  6. Si se llega a este punto, significa que el algoritmo no ha conseguido encontrar ningún factor de NN.

Es posible que, al ejecutar este algoritmo, no se encuentre un factor de NN. 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/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Mediante la teoría básica de números se puede demostrar que, para una elección aleatoria de aa, con una probabilidad de al menos 1/21/2, ninguno de estos sucesos se produce. De hecho, la probabilidad de que se produzca cualquiera de los dos eventos es, como máximo, 2−(m−1)2^{-(m-1)}, donde mm es el número de factores primos distintos de NN, razón por la cual es necesario suponer que NN no es una potencia de un número primo. (Para que esto sea cierto, también es necesario suponer que « NN » es impar.)

Esto significa que cada ejecución tiene al menos un 50 % de probabilidades de dividir NN. Por lo tanto, si ejecutamos el algoritmo tt veces, eligiendo al azar aa cada vez, conseguiremos dividir NN con una probabilidad de al menos 1−2−t1 - 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/2−1  (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 « Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1) », concluimos que

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

Ahora bien, sabemos que ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 por la definición del orden —lo cual es otra forma de decir que NN divide exactamente a ar−1a^r - 1. Eso significa que NN divide exactamente el producto

(ar/2−1)(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/2−1a^{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.