Skip to main content
IBM Quantum Platform

Algoritmo de Shor

Agora, voltaremos nossa atenção para o problema de fatoração de números inteiros e veremos como ele pode ser resolvido de forma eficiente em um computador quântico usando a estimativa de fase. O algoritmo que obteremos é o algoritmo de Shor para fatoração de números inteiros. Shor não descreveu seu algoritmo especificamente em termos de estimativa de fase, mas essa é uma maneira natural e intuitiva de explicar como ele funciona.

Começaremos discutindo um problema intermediário conhecido como problema de determinação de ordem e veremos como a estimativa de fase fornece uma solução para esse problema. Em seguida, veremos como uma solução eficiente para o problema de determinação de ordem nos dá uma solução eficiente para o problema de fatoração de números inteiros. (Quando uma solução para um problema fornece uma solução para outro problema como esse, dizemos que o segundo problema se reduz ao primeiro - portanto, nesse caso, estamos reduzindo a fatoração de números inteiros à determinação de ordens) Essa segunda parte do algoritmo de Shor não faz uso da computação quântica; é totalmente clássica. A computação quântica é necessária apenas para solucionar a determinação de ordens.


O problema da localização de pedidos

Algumas noções básicas de teoria dos números

Para explicar o problema de determinação de ordem e como ele pode ser resolvido usando a estimativa de fase, será útil começar com alguns conceitos básicos da teoria dos números e introduzir algumas notações úteis ao longo do caminho.

Para começar, para qualquer número inteiro positivo NN, defina o conjunto ZN\mathbb{Z}_N da seguinte maneira.

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

Por exemplo, 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 assim por diante.

São conjuntos de números, mas podemos considerá-los como algo mais do que apenas conjuntos. Em particular, podemos pensar em operações aritméticas em ZN\mathbb{Z}_N, como adição e multiplicação — e se concordarmos em sempre considerar nossos resultados módulo NN (ou seja, dividir por NN e tomar o resto como resultado), permaneceremos sempre dentro desse conjunto ao realizarmos essas operações. As duas operações específicas de adição e multiplicação, ambas consideradas módulo NN, transformam ZN\mathbb{Z}_N em um anel, que é um tipo de objeto de importância fundamental na álgebra.

Por exemplo, 33 e 55 são elementos de Z7\mathbb{Z}_7, e se os multiplicarmos, obtemos 3⋅5=153\cdot 5 = 15, o que deixa um resto de 11 quando dividido por 77. Às vezes, expressamos isso da seguinte maneira.

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

Mas também podemos simplesmente escrever 3⋅5=13 \cdot 5 = 1, desde que tenha ficado claro que estamos trabalhando em Z7\mathbb{Z}_7, apenas para manter nossa notação o mais simples possível.

A título de exemplo, aqui estão as tabuadas de adição e multiplicação para o número 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 os elementos NN do conjunto ZN\mathbb{Z}_N, os elementos a∈ZNa\in\mathbb{Z}_N que satisfazem a condição gcd⁡(a,N)=1\gcd(a,N) = 1 são especiais. Frequentemente, o conjunto que contém esses elementos é representado por um asterisco, assim.

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

Se concentrarmos nossa atenção na operação de multiplicação, o conjunto ZN∗\mathbb{Z}_N^{\ast} forma um grupo — mais especificamente, um grupo abeliano —, que é outro tipo importante de objeto na álgebra. É um fato básico sobre esses conjuntos (e grupos finitos em geral) que, se escolhermos qualquer elemento a∈ZN∗a\in\mathbb{Z}_N^{\ast} e multiplicarmos repetidamente aa por si mesmo, sempre chegaremos, eventualmente, ao número 11.

Como primeiro exemplo, vamos considerar N=6N=6. Temos que 5∈Z6∗5\in\mathbb{Z}_6^{\ast}, pois gcd⁡(5,6)=1\gcd(5,6) = 1; e, se multiplicarmos 55 por si mesmo, obtemos 11, conforme confirma a tabela acima.

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

Como segundo exemplo, vamos considerar N=21N = 21. Se analisarmos os números de 00 a 2020, aqueles cujo MMC é igual a 11 com 2121 são os seguintes.

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 um desses elementos, é possível elevar esse número a uma potência inteira positiva para obter um número d 11 o. Aqui estão as menores potências para as quais isso 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 trabalhando no site Z21\mathbb{Z}_{21} para todas essas equações, que não nos preocupamos em escrever - consideramos implícitas para evitar confusão. Continuaremos a fazer isso durante o restante da lição.

Descrição do problema e conexão com a estimativa de fase

Agora, podemos definir o problema de determinação de ordem.

Order finding

Entrada: inteiros positivos NN e aa que satisfazem gcd⁡(N,a)=1\gcd(N,a) = 1\ Saída: o menor inteiro positivo rr tal que ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternativamente, utilizando a notação que acabamos de apresentar acima, temos a∈ZN∗a \in \mathbb{Z}_N^{\ast} e estamos procurando o menor inteiro positivo rr tal que ar=1a^r = 1. Esse número rr é chamado de ordem de aa módulo NN.

Para relacionar o problema da determinação da ordem à estimativa de fase, vamos considerar a operação definida em um sistema cujos estados clássicos correspondem a ZN\mathbb{Z}_N, onde multiplicamos por um elemento fixo 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 ficar claro, estamos fazendo a multiplicação em um ZN\mathbb{Z}_N o; portanto, está implícito que estamos calculando o produto módulo NN dentro do ket no lado direito da equação.

Por exemplo, se considerarmos N=15N = 15 e a=2a=2, a ação de M2M_2 na base padrão {∣0⟩,…,∣14⟩}\{\vert 0\rangle,\ldots,\vert 14\rangle\} é a seguinte.

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}

Esta é uma operação unitária, desde que gcd⁡(a,N)=1\gcd(a,N)=1; ela embaralha os elementos da base padrão {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}; portanto, como matriz, trata-se de uma matriz de permutação. Fica evidente, a partir de sua definição, que essa operação é determinística, e uma maneira simples de perceber que ela é invertível é pensar na ordem rr de aa módulo NN e reconhecer que o inverso de MaM_a é 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}

Há outra maneira de pensar sobre a inversa que não requer nenhum conhecimento sobre o “ rr ” (que, afinal, é o que estamos tentando calcular). Para cada elemento a∈ZN∗a\in\mathbb{Z}_N^{\ast}, existe sempre um elemento único b∈ZN∗b\in\mathbb{Z}_N^{\ast} que satisfaz ab=1ab=1. Denotamos esse elemento bb por a−1a^{-1}, e ele pode ser calculado de forma eficiente; uma extensão do algoritmo do MMC de Euclides realiza isso com custo quadrático em lg⁡(N)\operatorname{lg}(N). E, portanto,

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

Portanto, a operação MaM_a é determinística e invertível. Isso implica que ela é descrita por uma matriz de permutação e, portanto, é unitária.

Agora, vamos pensar nos vetores próprios e nos valores próprios da operação MaM_a, supondo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}. Conforme acabamos de argumentar, essa suposição nos indica que MaM_a é unitária.

Existem NN valores próprios de MaM_a, podendo incluir o mesmo valor próprio repetido várias vezes, e, em geral, há certa liberdade na escolha dos vetores próprios correspondentes — mas não precisamos nos preocupar com todas as possibilidades. Vamos começar de forma simples e identificar apenas um vetor próprio d MaM_a o.

∣ψ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}}

O número rr é a ordem de aa módulo NN, aqui e ao longo do restante da aula. O autovalor associado a esse autovetor é 11, pois ele não sofre alteração quando o multiplicamos 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

Isso acontece porque ar=1a^r = 1; portanto, cada estado da base padrão ∣ak⟩\vert a^k \rangle é deslocado para ∣ak+1⟩\vert a^{k+1} \rangle para k≤r−1k\leq r-1, e ∣ar−1⟩\vert a^{r-1} \rangle volta a ∣1⟩\vert 1\rangle. Em termos informais, é como se estivéssemos mexendo lentamente ∣ψ0⟩\vert \psi_0 \rangle, mas ele já está completamente misturado, então nada muda.

Aqui está outro exemplo de vetor próprio de um MaM_a o. Este, por acaso, é mais interessante no contexto da determinação da ordem e da estimativa 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}}

Como alternativa, podemos escrever esse vetor usando um somatório da seguinte forma.

∣ψ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

Aqui, vemos o número complexo ωr=e2πi/r\omega_r = e^{2\pi i/r} surgir naturalmente, devido à forma como a multiplicação por aa funciona módulo NN. Desta vez, o autovalor correspondente é ωr\omega_r. Para comprovar isso, podemos primeiro fazer o seguinte 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

Então, como ωr−r=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 e ∣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,

Então, Ma∣ψ1⟩=ωr∣ψ1⟩M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Seguindo o mesmo raciocínio, podemos identificar outros pares de vetores próprios e valores próprios para MaM_a. Para qualquer escolha de j∈{0,…,r−1}j\in\{0,\ldots,r-1\}, temos 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

é um vetor próprio de MaM_a cujo valor próprio correspondente é ωrj\omega_r^j.

Ma∣ψj⟩=ωrj∣ψj⟩M_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Existem outros vetores próprios de MaM_a, mas não precisamos nos preocupar com eles — vamos nos concentrar exclusivamente nos vetores próprios ∣ψ0⟩,…,∣ψr−1⟩\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle que acabamos de identificar.


Localização de ordem por meio de estimativa de fase

Para resolver o problema de determinação da ordem para uma determinada escolha de a∈ZN∗a\in\mathbb{Z}_N^{\ast}, podemos aplicar o procedimento de estimativa de fase à operação MaM_a.

Para isso, precisamos implementar não apenas MaM_a de forma eficiente com um circuito quântico, mas também Ma2M_a^2, Ma4M_a^4, Ma8M_a^8 e assim por diante, indo tão longe quanto for necessário para obter uma estimativa suficientemente precisa a partir do procedimento de estimativa de fase. Aqui, vamos explicar como isso pode ser feito e, mais adiante, vamos determinar exatamente qual o nível de precisão necessário.

Vamos começar pela operação “ MaM_a ” por si só. Naturalmente, como estamos trabalhando com o modelo de circuito quântico, usaremos a notação binária para codificar os números entre 00 e N−1N-1. O maior número que precisamos codificar é N−1N-1, portanto, o número de bits de que precisamos é

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

Por exemplo, se N=21N = 21, temos n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5. Veja a seguir como fica a codificação dos elementos de Z21\mathbb{Z}_{21} como cadeias binárias de comprimento 55.

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

E agora, aqui está uma definição precisa de como MaM_a é definido como uma operação de 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}

A questão é que, embora nos importemos apenas com o funcionamento de MaM_a para ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle, precisamos especificar como isso funciona para os demais estados da base padrão 2n−N2^n - N — e precisamos fazer isso de forma que ainda nos proporcione uma operação unitária. Isso é conseguido definindo-se a função “ MaM_a ” de forma que ela não altere os demais estados da base padrão.

Utilizando os algoritmos de multiplicação e divisão de números inteiros discutidos na lição anterior, juntamente com a metodologia para implementações reversíveis e sem resíduos desses algoritmos, podemos construir um circuito quântico que execute a operação “ MaM_a ”, para qualquer escolha de a∈ZN∗a\in\mathbb{Z}_N^{\ast}, com custo O(n2)O(n^2). Aqui está uma maneira de fazer isso.

  1. Construa um circuito para realizar a operação
∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

em que

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 o método descrito na aula anterior. Isso nos dá um circuito de tamanho O(n2)O(n^2).

  1. Troque os dois sistemas de nn -qubit usando nn swap gates para trocar os qubits individualmente.

  2. De forma semelhante à primeira etapa, construa um circuito para a operação

∣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

onde a−1a^{-1} é a inversa de aa em ZN∗\mathbb{Z}_N^{\ast}.

Ao inicializar os nn qubits inferiores e compor as três etapas, obtemos essa transformação:

∣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

O método requer qubits do espaço de trabalho, mas eles são retornados ao seu estado inicializado ao final, o que nos permite usar esses circuitos para a estimativa de fase. O custo total do circuito que obtemos é O(n2)O(n^2) es.

Para executar Ma2M_a^2, Ma4M_a^4, Ma8M_a^8 e assim por diante, podemos usar exatamente o mesmo método, exceto que substituímos aa por a2a^2, a4a^4, a8a^8 e assim por diante, como elementos de ZN∗\mathbb{Z}_N^{\ast}. Ou seja, para qualquer potência kk que escolhermos, podemos criar um circuito para MakM_a^k não iterando kk vezes o circuito para MaM_a, mas sim calculando b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} e, em seguida, usando o circuito para MbM_b.

O cálculo de potências ak∈ZNa^k \in \mathbb{Z}_N corresponde ao problema da exponenciação modular mencionado na aula anterior. Esse cálculo pode ser feito de forma clássica, utilizando o algoritmo de exponenciação modular mencionado na aula anterior (frequentemente chamado de algoritmo da potência na teoria computacional dos números). Na verdade, precisamos apenas das potências d power-of-2 de aa, em particular a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, e podemos obter essas potências elevando m−1m-1 ao quadrado repetidamente. Cada elevação ao quadrado pode ser realizada por um circuito booleano de tamanho O(n2)O(n^2).

Em essência, o que estamos fazendo aqui, na prática, é transferir o problema de iterar MaM_a tantas vezes quanto 2m−12^{m-1} para um cálculo clássico eficiente. E é uma sorte que isso seja possível! Para uma escolha arbitrária de um circuito quântico no problema da estimativa de fase, é improvável que isso seja possível — e, nesse caso, o custo resultante para a estimativa de fase cresce exponencialmente em função do número de qubits de controle mm.

Solução dada um vetor próprio conveniente

Para entender como podemos resolver o problema da determinação da ordem usando a estimativa de fase, vamos começar supondo que executemos o procedimento de estimativa de fase na operação MaM_a usando o vetor próprio ∣ψ1⟩\vert\psi_1\rangle. Conseguir esse vetor próprio não é fácil, como veremos, então a história não termina aqui — mas é útil começar por aqui.

O valor próprio de MaM_a correspondente ao vetor próprio ∣ψ1⟩\vert \psi_1\rangle é

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

Ou seja, ωr=e2πiθ\omega_r = e^{2\pi i \theta} para θ=1/r\theta = 1/r. Portanto, se aplicarmos o procedimento de estimativa de fase em MaM_a usando o vetor próprio ∣ψ1⟩\vert\psi_1\rangle, obteremos uma aproximação de 1/r1/r. Ao calcular o recíproco, poderemos determinar rr — desde que nossa aproximação seja boa o suficiente.

Mais detalhadamente, quando executamos o procedimento de estimativa de fase utilizando qubits de control mm, o que obtemos é um número y∈{0,…,2m−1}y\in\{0,\ldots,2^m-1\}. Em seguida, tomamos y/2my/2^m como uma estimativa para θ\theta, que, no caso em questão, é 1/r1/r. Para determinar qual é o valor de rr a partir dessa aproximação, o mais natural a se fazer é calcular o recíproco da nossa aproximação e arredondar para o inteiro mais próximo.

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

Por exemplo, suponhamos que r=6r = 6 e realizemos a estimativa de fase em MaM_a com o vetor próprio ∣ψ1⟩\vert\psi_1\rangle utilizando m=5m = 5 bits de controle. A melhor aproximação de 55 -bit para 1/r=1/61/r = 1/6 é 5/325/32, e temos uma chance bastante boa (cerca de 68%68\% neste caso) de obter o resultado y=5y=5 a partir da estimativa de fase. Temos

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

e, ao arredondar para o inteiro mais próximo, obtém-se 66, que é a resposta correta.

Por outro lado, se não usarmos precisão suficiente, talvez não cheguemos à resposta correta. Por exemplo, se considerarmos qubits de control m=4m = 4 es na estimativa de fase, poderemos obter a melhor aproximação de 44 bits para 1/r=1/61/r = 1/6, que é 3/163/16. Calculando o recíproco, obtém-se

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

e, ao arredondar para o inteiro mais próximo, obtém-se uma resposta incorreta de 55.

Então, qual é o nível de precisão necessário para chegarmos à resposta correta? Sabemos que a ordem rr é um número inteiro e, intuitivamente, o que precisamos é de precisão suficiente para distinguir 1/r1/r de possibilidades próximas, incluindo 1/(r+1)1/(r+1) e 1/(r−1)1/(r-1). O número mais próximo de 1/r1/r com o qual precisamos nos preocupar é 1/(r+1)1/(r+1), e a distância entre esses dois números é

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

Portanto, se quisermos ter certeza de que não confundiremos 1/r1/r com 1/(r+1)1/(r+1), basta usar precisão suficiente para garantir que a melhor aproximação y/2my/2^m de 1/r1/r esteja mais próxima de 1/r1/r do que de 1/(r+1)1/(r+1). Se usarmos precisão 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 o erro seja menor que a metade da distância entre 1/r1/r e 1/(r+1)1/(r+1); nesse caso, y/2my/2^m estará mais próximo de 1/r1/r do que de qualquer outra possibilidade, incluindo 1/(r+1)1/(r+1) e 1/(r−1)1/(r-1).

Podemos verificar isso da seguinte forma. Suponha que

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

para ε\varepsilon satisfazendo

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

Quando tomamos a recíproca, obtemos

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

Ao maximizar no numerador e minimizar no denominador, podemos limitar a distância que estamos de rr da seguinte forma.

∣ε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 distância de rr, então, como era de se esperar, chegaremos a rr ao arredondar.

Infelizmente, como ainda não sabemos o que é rr, não podemos usá-lo para nos dizer de quanta precisão precisamos. O que podemos fazer é usar o fato de que rr deve ser menor que NN para garantir que usemos precisão suficiente. Em particular, se usarmos precisão suficiente para garantir que a melhor aproximação y/2my/2^m para 1/r1/r satisfaça

∣y2m−1r∣≤12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

então teremos precisão suficiente para determinar corretamente rr quando tomarmos a recíproca. O site m=2lg⁡(N)+1m = 2\operatorname{lg}(N)+1 garante que temos uma grande chance de obter uma estimativa com essa precisão usando o método descrito anteriormente. (O site m=2lg⁡(N)m = 2\operatorname{lg}(N) é bom o suficiente se estivermos confortáveis com um limite inferior de 40% na probabilidade de sucesso)

Solução geral

Como acabamos de ver, se tivermos o vetor próprio ∣ψ1⟩\vert \psi_1 \rangle de MaM_a, podemos determinar rr por meio da estimativa de fase, desde que utilizemos um número suficiente de qubits de controle para realizar isso com precisão adequada. Infelizmente, não é fácil obter o vetor próprio ∣ψ1⟩\vert\psi_1\rangle, por isso precisamos descobrir como proceder.

Suponhamos, por um instante, que procedamos exatamente como acima, exceto que utilizaremos o vetor próprio ∣ψk⟩\vert\psi_k\rangle em vez de ∣ψ1⟩\vert\psi_1\rangle, para qualquer escolha de k∈{0,…,r−1}k\in\{0,\ldots,r-1\} que decidirmos considerar. O resultado que obtemos do procedimento de estimativa de fase será uma aproximação

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

Partindo do pressuposto de que não sabemos nem kk nem rr, isso pode ou não nos permitir identificar rr. Por exemplo, se k=0k = 0, obteremos uma aproximação y/2my/2^m para 00, o que, infelizmente, não nos diz nada. Este, no entanto, é um caso incomum; para outros valores de kk, poderemos, pelo menos, aprender algo sobre rr.

Podemos usar um algoritmo conhecido como algoritmo de fração contínua para transformar nossa aproximação y/2my/2^m em frações próximas - incluindo k/rk/r se a aproximação for boa o suficiente. Não explicaremos o algoritmo de fração contínua aqui. Em vez disso, aqui está uma declaração de um fato conhecido sobre esse algoritmo.

Fact

Dados um número inteiro N≥2N\geq 2 e um número real α∈(0,1)\alpha\in(0,1), há, no máximo, uma escolha de números inteiros u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} tais que v≠0v\neq 0 e gcd⁡(u,v)=1\gcd(u,v)=1 satisfaçam ∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dados α\alpha e NN, o algoritmo de frações contínuas encontra uu e vv, ou informa que eles não existem. Esse algoritmo pode ser implementado como um circuito booleano com tamanho O((lg⁡(N))3)O((\operatorname{lg}(N))^3).

Se tivermos uma aproximação muito próxima y/2my/2^m para k/rk/r e aplicarmos o algoritmo da fração contínua para NN e α=y/2m\alpha = y/2^m, obteremos uu e vv, conforme descrito no enunciado. Uma análise dos fatos nos permite concluir que

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

Observe, em particular, que não aprendemos necessariamente que kk e rr; aprendemos apenas que k/rk/r na forma mais simples possível.

Por exemplo, e como já percebemos, não vamos aprender nada com k=0k=0. Mas esse é o único valor de kk em que isso ocorre. Quando kk é diferente de zero, pode ter fatores comuns com rr, mas o número vv que obtemos a partir do algoritmo da fração contínua deve, no mínimo, dividir rr.

Isso está longe de ser óbvio, mas é verdade que, se tivermos a capacidade de aprender uu e vv para u/v=k/ru/v = k/r para k∈{0,…,r−1}k\in\{0,\ldots,r-1\}, escolhidos aleatoriamente de maneira uniforme, então é muito provável que consigamos recuperar rr após apenas algumas amostras. Em particular, se nossa suposição para rr for o mínimo múltiplo comum de todos os valores do denominador vv que observamos, estaremos certos com alta probabilidade. Intuitivamente falando, alguns valores de kk não são bons porque compartilham fatores comuns com rr, e esses fatores comuns ficam ocultos para nós quando aprendemos uu e vv. Mas escolhas aleatórias de kk provavelmente não ocultarão por muito tempo os fatores de rr, e a probabilidade de não adivinharmos rr corretamente ao calcular o mínimo múltiplo comum dos denominadores que observamos diminui exponencialmente com o aumento do número de amostras.

Resta abordar a questão de como obter um vetor próprio ∣ψk⟩\vert\psi_k\rangle de MaM_a para executar o procedimento de estimativa de fase. Acontece que, na verdade, não precisamos criá-los!

O que faremos, em vez disso, é aplicar o procedimento de estimativa de fase ao estado ∣1⟩\vert 1\rangle, ou seja, a codificação binária de nn bits do número 11, em vez de um vetor próprio ∣ψ⟩\vert\psi\rangle de MaM_a. Até agora, falamos apenas sobre aplicar o procedimento de estimativa de fase a um vetor próprio específico, mas nada nos impede de aplicar o procedimento a um estado de entrada que não seja um vetor próprio de MaM_a, e é isso que estamos fazendo aqui com o estado ∣1⟩\vert 1\rangle. (Isso não é um vetor próprio de MaM_a, a menos que a=1a=1, o que não é uma possibilidade que nos interesse.)

A justificativa para escolher o estado ∣1⟩\vert 1\rangle em vez de um vetor próprio de MaM_a é que a equação a seguir é verdadeira.

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

Uma maneira de verificar essa equação é comparar os produtos internos dos dois lados com cada estado da base padrão, usando as fórmulas mencionadas anteriormente na lição para ajudar a avaliar os resultados do lado direito. Como consequência, obteremos exatamente os mesmos resultados de medição como se tivéssemos escolhido k∈{0,…,r−1}k\in\{0,\ldots,r-1\} uniformemente de forma aleatória e usado ∣ψk⟩\vert\psi_k\rangle como um vetor próprio.

Mais detalhadamente, imaginemos que executemos o procedimento de estimativa de fase com o estado ∣1⟩\vert 1\rangle no lugar de um dos vetores próprios ∣ψk⟩\vert\psi_k\rangle. Após a realização da transformada de Fourier quântica inversa, isso nos deixa com o estado

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

em que

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

O vetor ∣γk⟩\vert\gamma_k\rangle representa o estado dos mm qubits superiores depois que o inverso da transformação quântica de Fourier foi realizado neles.

Assim, em virtude do fato de que {∣ψ0⟩,…,∣ψr−1⟩}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} é um conjunto ortonormal, descobrimos que uma medição dos principais mm qubits superior produz uma aproximação y/2my/2^m do valor k/rk/r em que k∈{0,…,r−1}k\in\{0,\ldots,r-1\} é escolhido uniformemente de forma aleatória. Como já discutimos, isso nos permite aprender rr com um alto grau de confiança após várias execuções independentes, que era o nosso objetivo.

Custo total

O custo para implementar cada operação controlada-unitária MakM_a^k é O(n2)O(n^2). Existem mm operações controladas-unitárias, e temos m=O(n)m = O(n), portanto, o custo total das operações controladas-unitárias é O(n3)O(n^3). Além disso, temos mm portas de Hadamard (que contribuem com O(n)O(n) para o custo), e a transformada de Fourier quântica inversa contribui com O(n2)O(n^2) para o custo. Assim, o custo das operações unitárias controladas predomina sobre o custo de todo o procedimento — que é, portanto, O(n3)O(n^3).

Além do próprio circuito quântico, há alguns cálculos clássicos que precisam ser realizados ao longo do processo. Isso inclui o cálculo das potências aka^k em ZN\mathbb{Z}_N para k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1}, necessárias para criar as portas unitárias controladas, bem como o algoritmo de frações contínuas que converte aproximações de θ\theta em frações. Esses cálculos podem ser realizados por circuitos booleanos com um custo total de O(n3)O(n^3).

Como é típico, todos esses limites podem ser aprimorados usando algoritmos assintoticamente rápidos; esses limites pressupõem que estamos usando algoritmos padrão para operações aritméticas básicas.


Factoring por encomenda

A última coisa que precisamos discutir é como a solução do problema de determinação de ordem nos ajuda a fatorar. Essa parte é totalmente clássica - não tem nada a ver especificamente com a computação quântica.

A ideia básica é a seguinte. Queremos fatorar o número NN e podemos fazer isso de forma recursiva. Especificamente, podemos nos concentrar na tarefa de dividir NN, o que significa encontrar quaisquer dois números inteiros b,c≥2b,c\geq 2 para os quais N=bcN = bc. Isso não é possível se NN for um número primo, mas podemos verificar de forma eficiente se NN é primo usando primeiro um algoritmo de teste de primalidade; e, se NN não for primo, tentaremos dividi-lo. Depois de dividir NN, basta aplicar a recursão em bb e cc até que todos os nossos fatores sejam primos e obtenhamos a fatoração em números primos de NN.

Dividir números inteiros pares é fácil: basta exibir 22 e N/2N/2.

Também é fácil dividir potências perfeitas, ou seja, números da forma N=sjN = s^j para inteiros s,j≥2s,j\geq 2, simplesmente aproximando as raízes N1/2N^{1/2}, N1/3N^{1/3}, N1/4N^{1/4} e assim por diante, e verificando os inteiros próximos como possíveis candidatos para ss. Não precisamos ir além de log⁡(N)\log(N) passos nessa sequência, pois, nesse ponto, a raiz fica abaixo de 22 e não revelará candidatos adicionais.

É bom que possamos fazer essas duas coisas, pois a busca de ordem não nos ajudará a fatorar números pares nem no caso de potências de números primos, em que o número ss por acaso é primo. No entanto, se NN for ímpar e não for uma potência de um número primo, a determinação da ordem nos permite dividir NN.

Probabilistic algorithm to split an odd, composite integer N that is not a prime power
  1. Escolha aleatoriamente a∈{2,…,N−1}a\in\{2,\ldots,N-1\}.

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

  3. Se d>1d > 1, então exiba b=db = d e c=N/dc = N/d e encerre a execução. Caso contrário, prossiga para a próxima etapa, sabendo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

  4. Seja rr a ordem de aa módulo NN. (É aqui que precisamos da localização de pedidos.)

  5. Se rr estiver empatado:

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

    5.2
    Calculed=gcd⁡(x,N)d = \gcd(x,N) . 5.3
    Sed>1d>1 , então exibab=db=d ec=N/dc = N/d e pare.

  6. Se esse ponto for alcançado, significa que o algoritmo não conseguiu encontrar um fator de NN.

É possível que uma execução deste algoritmo não consiga encontrar um fator de NN. Mais especificamente, isso ocorre em duas situações:

  • A ordem de aa modulo NN é ímpar.
  • A ordem de aa módulo NN é par e gcd⁡(ar/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Utilizando-se da teoria básica dos números, é possível provar que, para uma escolha aleatória de aa, com probabilidade de pelo menos 1/21/2, nenhum desses eventos ocorre. De fato, a probabilidade de que qualquer um dos eventos ocorra é, no máximo, 2−(m−1)2^{-(m-1)}, sendo mm o número de fatores primos distintos de NN, e é por isso que é necessária a suposição de que NN não seja uma potência de um número primo. (Para que esse fato seja verdadeiro, também é necessário supor que NN seja ímpar.)

Isso significa que cada execução tem pelo menos 50% de chance de dividir NN. Portanto, se executarmos o algoritmo tt vezes, escolhendo aleatoriamente aa a cada vez, conseguiremos dividir NN com uma probabilidade de pelo menos 1−2−t1 - 2^{-t}.

A ideia básica por trás do algoritmo é a seguinte. Se tivermos uma opção de aa para a qual a ordem rr de aa modulo NN seja par, então r/2r/2 é um número inteiro e podemos considerar os 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 a fórmula Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1), concluímos que

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

Ora, sabemos que ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1, pela definição da ordem — o que é outra forma de dizer que NN divide inteiramente ar−1a^r - 1. Isso significa que NN divide inteiramente o produto

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

Para que isso seja verdade, todos os fatores primos de NN também devem ser fatores primos de ar/2−1a^{r/2} - 1 ou ar/2+1a^{r/2} + 1 (ou ambos) - e, para uma seleção aleatória de aa, é improvável que todos os fatores primos de NN dividam um dos termos e nenhum divida o outro. Caso contrário, desde que alguns dos fatores primos de NN dividam o primeiro termo e alguns dividam o segundo termo, poderemos encontrar um fator não trivial de NN calculando o GCD com o primeiro termo.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.