Przejdź do głównej treści

Algorytm Shora

Teraz skupimy naszą uwagę na problemie faktoryzacji liczb całkowitych i zobaczymy, jak można go efektywnie rozwiązać na komputerze kwantowym, używając estymacji fazy. Algorytm, który otrzymamy, to algorytm Shora faktoryzacji liczb całkowitych. Shor nie opisał swojego algorytmu konkretnie w kategoriach estymacji fazy, ale jest to naturalny i intuicyjny sposób wyjaśnienia, jak on działa.

Zaczniemy od omówienia pośredniego problemu znanego jako problem znajdowania rzędu i zobaczymy, jak estymacja fazy dostarcza rozwiązania tego problemu. Następnie zobaczymy, jak efektywne rozwiązanie problemu znajdowania rzędu daje nam efektywne rozwiązanie problemu faktoryzacji liczb całkowitych. (Gdy rozwiązanie jednego problemu zapewnia rozwiązanie innego problemu w ten sposób, mówimy, że ten drugi problem redukuje się do pierwszego — więc w tym przypadku redukujemy faktoryzację liczb całkowitych do znajdowania rzędu.) Ta druga część algorytmu Shora w ogóle nie korzysta z obliczeń kwantowych; jest całkowicie klasyczna. Obliczenia kwantowe są potrzebne tylko do rozwiązania problemu znajdowania rzędu.

Problem znajdowania rzędu​

Kilka podstawowych pojęć z teorii liczb​

Aby wyjaśnić problem znajdowania rzędu i sposób, w jaki można go rozwiązać za pomocą estymacji fazy, pomocne będzie rozpoczęcie od kilku podstawowych pojęć z teorii liczb oraz wprowadzenie po drodze przydatnej notacji.

Na początek, dla dowolnej dodatniej liczby całkowitej NN, zdefiniujmy zbiór ZN\mathbb{Z}_N w następujący sposób.

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

Na przykład, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; i tak dalej.

Są to zbiory liczb, ale możemy myśleć o nich jako o czymś więcej niż tylko zbiorach. W szczególności możemy rozważać operacje arytmetyczne na ZN\mathbb{Z}_N, takie jak dodawanie i mnożenie — a jeśli umówimy się, że zawsze bierzemy nasze wyniki modulo NN (czyli dzielimy przez NN i bierzemy resztę jako wynik), zawsze pozostaniemy wewnątrz tego zbioru podczas wykonywania tych operacji. Te dwie konkretne operacje dodawania i mnożenia, obie brane modulo NN, czynią ZN\mathbb{Z}_N pierścieniem, który jest fundamentalnie ważnym typem obiektu w algebrze.

Na przykład, 33 i 55 są elementami Z7,\mathbb{Z}_7, a jeśli pomnożymy je przez siebie, otrzymamy 3⋅5=15,3\cdot 5 = 15, co daje resztę 11 po podzieleniu przez 7.7. Czasami wyrażamy to w następujący sposób.

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

Ale możemy również po prostu napisać 3⋅5=13 \cdot 5 = 1, o ile jasne jest, że pracujemy w Z7\mathbb{Z}_7, po to tylko, aby utrzymać naszą notację tak prostą, jak to możliwe.

Jako przykład, oto tabliczki dodawania i mnożenia dla 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}

Spośród NN elementów ZN\mathbb{Z}_N, szczególne są elementy a∈ZNa\in\mathbb{Z}_N spełniające gcd⁡(a,N)=1\gcd(a,N) = 1. Często zbiór zawierający te elementy oznacza się gwiazdką, w następujący sposób.

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

Jeśli skupimy naszą uwagę na operacji mnożenia, zbiór ZN∗\mathbb{Z}_N^{\ast} tworzy grupę — konkretnie grupę abelową — która jest kolejnym ważnym typem obiektu w algebrze. Podstawowym faktem dotyczącym tych zbiorów (i skończonych grup w ogóle) jest to, że jeśli wybierzemy dowolny element a∈ZN∗a\in\mathbb{Z}_N^{\ast} i będziemy wielokrotnie mnożyć aa przez siebie, to w końcu zawsze otrzymamy liczbę 11.

Jako pierwszy przykład weźmy N=6N=6. Mamy, że 5∈Z6∗5\in\mathbb{Z}_6^{\ast}, ponieważ gcd⁡(5,6)=1\gcd(5,6) = 1, a jeśli pomnożymy 55 przez siebie, otrzymamy 11, co potwierdza powyższa tabela.

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

Jako drugi przykład weźmy N=21N = 21. Jeśli przejdziemy przez liczby od 00 do 2020, to te, które mają NWD równe 11 z 2121, są następujące.

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

Dla każdego z tych elementów możliwe jest podniesienie tej liczby do dodatniej potęgi całkowitej, aby otrzymać 11. Oto najmniejsze potęgi, dla których to działa:

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}

Naturalnie pracujemy w Z21\mathbb{Z}_{21} dla wszystkich tych równań, czego nie zawracaliśmy sobie głowy zapisywaniem — przyjmujemy to za domyślne, aby uniknąć zaśmiecania. Będziemy to kontynuować przez resztę lekcji.

Sformułowanie problemu i związek z estymacją fazy​

Możemy teraz sformułować problem znajdowania rzędu.

Znajdowanie rzędu

Wejście: dodatnie liczby całkowite NN i aa spełniające gcd⁡(N,a)=1\gcd(N,a) = 1
Wyjście: najmniejsza dodatnia liczba całkowita rr taka, że ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternatywnie, używając notacji, którą właśnie wprowadziliśmy powyżej, mamy dane a∈ZN∗a \in \mathbb{Z}_N^{\ast}, i szukamy najmniejszej dodatniej liczby całkowitej rr takiej, że ar=1a^r = 1. Tę liczbę rr nazywamy rzędem elementu aa modulo NN.

Aby powiązać problem znajdowania rzędu z estymacją fazy, rozważmy operację zdefiniowaną na układzie, którego stany klasyczne odpowiadają ZN\mathbb{Z}_N, gdzie mnożymy przez ustalony element a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

Ma∣x⟩=∣ax⟩(dla kaz˙dego x∈ZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(dla każdego $x\in\mathbb{Z}_N$)}

Dla jasności: mnożenie wykonujemy w ZN\mathbb{Z}_N, więc niejawnie zakładamy, że bierzemy iloczyn modulo NN wewnątrz ketu po prawej stronie równania.

Na przykład, jeśli weźmiemy N=15N = 15 i a=2a=2, to działanie M2M_2 na bazie standardowej {∣0⟩,…,∣14⟩}\{\vert 0\rangle,\ldots,\vert 14\rangle\} wygląda następująco.

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}

Jest to operacja unitarna, pod warunkiem że gcd⁡(a,N)=1\gcd(a,N)=1; permutuje ona elementy bazy standardowej {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, więc jako macierz jest macierzą permutacji. Z jej definicji jasno wynika, że operacja ta jest deterministyczna, a prostym sposobem, by zobaczyć, że jest odwracalna, jest rozważenie rzędu rr elementu aa modulo NN i zauważenie, że odwrotnością MaM_a jest 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}

Istnieje inny sposób myślenia o odwrotności, który nie wymaga żadnej wiedzy o rr (które w końcu jest tym, co próbujemy obliczyć). Dla każdego elementu a∈ZN∗a\in\mathbb{Z}_N^{\ast} zawsze istnieje jednoznaczny element b∈ZN∗b\in\mathbb{Z}_N^{\ast} spełniający ab=1ab=1. Ten element bb oznaczamy przez a−1a^{-1} i można go wydajnie obliczyć; rozszerzenie algorytmu GCD Euklidesa robi to z kosztem kwadratowym względem lg⁡(N)\operatorname{lg}(N). A zatem

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

Tak więc operacja MaM_a jest zarówno deterministyczna, jak i odwracalna. Oznacza to, że jest opisana przez macierz permutacji, a więc jest unitarna.

Zastanówmy się teraz nad wektorami własnymi i wartościami własnymi operacji MaM_a, zakładając, że a∈ZN∗a\in\mathbb{Z}_N^{\ast}. Jak właśnie uzasadniono, to założenie mówi nam, że MaM_a jest unitarne.

Istnieje NN wartości własnych MaM_a, być może zawierających tę samą wartość własną powtórzoną wielokrotnie, i ogólnie istnieje pewna dowolność w wyborze odpowiadających wektorów własnych — ale nie musimy się martwić wszystkimi możliwościami. Zacznijmy prosto i zidentyfikujmy tylko jeden wektor własny 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}}

Liczba rr to rząd aa modulo NN, tutaj i w całej pozostałej części lekcji. Wartość własna związana z tym wektorem własnym to 11, ponieważ nie zmienia się on, gdy mnożymy przez 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

Dzieje się tak, ponieważ ar=1a^r = 1, więc każdy stan bazy standardowej ∣ak⟩\vert a^k \rangle zostaje przesunięty do ∣ak+1⟩\vert a^{k+1} \rangle dla k≤r−1k\leq r-1, a ∣ar−1⟩\vert a^{r-1} \rangle zostaje przesunięty z powrotem do ∣1⟩\vert 1\rangle. Mówiąc nieformalnie, to tak, jakbyśmy powoli mieszali ∣ψ0⟩\vert \psi_0 \rangle, ale jest już całkowicie wymieszany, więc nic się nie zmienia.

Oto kolejny przykład wektora własnego MaM_a. Ten jest bardziej interesujący w kontekście znajdowania rzędu i estymacji fazy.

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

Alternatywnie, możemy zapisać ten wektor za pomocą sumowania w następujący sposób.

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

Tutaj widzimy, że liczba zespolona ωr=e2πi/r\omega_r = e^{2\pi i/r} pojawia się w naturalny sposób, ze względu na to, jak działa mnożenie przez aa modulo NN. Tym razem odpowiadająca wartość własna to ωr\omega_r. Aby to zobaczyć, możemy najpierw obliczyć w następujący sposób.

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

Następnie, ponieważ ωr−r=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 oraz ∣ar⟩=∣1⟩=∣a0⟩\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, widzimy, że

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,

so Ma∣ψ1⟩=ωr∣ψ1⟩M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Stosując to samo rozumowanie, możemy zidentyfikować dodatkowe pary wektor własny/wartość własna dla MaM_a. Dla dowolnego wyboru j∈{0,…,r−1}j\in\{0,\ldots,r-1\} mamy, że

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

jest wektorem własnym MaM_a, którego odpowiadająca wartość własna to ωrj\omega_r^j.

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

Istnieją inne wektory własne MaM_a, ale nie musimy się nimi zajmować — skupimy się wyłącznie na wektorach własnych ∣ψ0⟩,…,∣ψr−1⟩\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle, które właśnie zidentyfikowaliśmy.

Znajdowanie rzędu za pomocą estymacji fazy​

Aby rozwiązać problem znajdowania rzędu dla danego wyboru a∈ZN∗a\in\mathbb{Z}_N^{\ast}, możemy zastosować procedurę estymacji fazy do operacji MaM_a.

W tym celu musimy wydajnie zaimplementować nie tylko MaM_a za pomocą obwodu kwantowego, lecz także Ma2,M_a^2, Ma4,M_a^4, Ma8M_a^8 i tak dalej, posuwając się na tyle daleko, na ile to konieczne, aby uzyskać wystarczająco precyzyjne oszacowanie z procedury estymacji fazy. Wyjaśnimy tutaj, jak można to zrobić, a później ustalimy dokładnie, jaka precyzja jest potrzebna.

Zacznijmy od samej operacji MaM_a. Naturalnie, ponieważ pracujemy z modelem obwodów kwantowych, użyjemy notacji binarnej do zakodowania liczb pomiędzy 00 a N−1N-1. Największą liczbą, którą musimy zakodować, jest N−1N-1, zatem liczba potrzebnych bitów wynosi

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

Na przykład, jeśli N=21N = 21, mamy n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5. Oto jak wygląda kodowanie elementów Z21\mathbb{Z}_{21} jako ciągów binarnych długości 55.

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

A teraz oto precyzyjna definicja tego, w jaki sposób MaM_a jest zdefiniowana jako operacja nn-kubitowa.

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}

Chodzi o to, że chociaż interesuje nas tylko, jak MaM_a działa dla ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle, musimy określić, jak działa dla pozostałych 2n−N2^n - N stanów bazy standardowej — i musimy to zrobić w taki sposób, aby nadal otrzymać operację unitarną. Zdefiniowanie MaM_a tak, aby nic nie robiła z pozostałymi stanami bazy standardowej, spełnia ten warunek.

Korzystając z algorytmów mnożenia i dzielenia liczb całkowitych omówionych w poprzedniej lekcji, wraz z metodologią ich odwracalnych, bezśmieciowych implementacji, możemy zbudować obwód kwantowy realizujący MaM_a, dla dowolnego wyboru a∈ZN∗a\in\mathbb{Z}_N^{\ast}, o koszcie O(n2)O(n^2). Oto jeden ze sposobów, w jaki można to zrobić.

  1. Zbuduj obwód realizujący operację

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    gdzie

    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}

    przy użyciu metody opisanej w poprzedniej lekcji. Daje to obwód o rozmiarze O(n2)O(n^2).

  2. Zamień dwa nn-kubitowe układy, używając nn bramek swap do indywidualnej zamiany kubitów.

  3. Podobnie jak w pierwszym kroku, zbuduj obwód dla operacji

    ∣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

    gdzie a−1a^{-1} jest odwrotnością aa w ZN∗\mathbb{Z}_N^{\ast}.

Inicjalizując dolne nn kubitów i składając te trzy kroki, uzyskujemy następującą transformację:

∣x⟩∣0n⟩↦krok 1∣x⟩∣fa(x)⟩↦krok 2∣fa(x)⟩∣x⟩↦krok 3∣fa(x)⟩∣x⊕fa−1(fa(x))⟩=∣fa(x)⟩∣0n⟩\vert x \rangle \vert 0^n \rangle \stackrel{\text{krok 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{krok 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{krok 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

Metoda wymaga kubitów roboczych, ale są one na końcu przywracane do stanu początkowego, co pozwala nam wykorzystać te obwody do estymacji fazy. Całkowity koszt uzyskanego obwodu wynosi O(n2)O(n^2).

Aby wykonać Ma2,M_a^2, Ma4,M_a^4, Ma8M_a^8 i tak dalej, możemy zastosować dokładnie tę samą metodę, z tą różnicą, że zastępujemy aa przez a2,a^2, a4,a^4, a8a^8 i tak dalej, jako elementy ZN∗.\mathbb{Z}_N^{\ast}. To znaczy, dla dowolnej potęgi k,k, którą wybierzemy, możemy utworzyć obwód dla MakM_a^k nie przez kk-krotne iterowanie obwodu dla Ma,M_a, lecz obliczając b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} i następnie używając obwodu dla Mb.M_b.

Obliczanie potęg ak∈ZNa^k \in \mathbb{Z}_N to problem potęgowania modularnego wspomniany w poprzedniej lekcji. Obliczenie to można wykonać klasycznie, używając algorytmu potęgowania modularnego wspomnianego w poprzedniej lekcji (często nazywanego algorytmem potęgowania w obliczeniowej teorii liczb). W rzeczywistości potrzebujemy jedynie potęg aa o wykładnikach będących potęgami dwójki, a mianowicie a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, a potęgi te możemy uzyskać poprzez iteracyjne podnoszenie do kwadratu m−1m-1 razy. Każde podniesienie do kwadratu można wykonać przez obwód logiczny o rozmiarze O(n2)O(n^2).

W istocie to, co tu faktycznie robimy, to przerzucenie problemu iterowania MaM_a aż 2m−12^{m-1} razy na wydajne obliczenia klasyczne. I mamy szczęście, że jest to możliwe! Dla dowolnego wyboru obwodu kwantowego w problemie estymacji fazy jest to mało prawdopodobne — a w takim przypadku wynikowy koszt estymacji fazy rośnie wykładniczo wraz z liczbą kubitów sterujących mm.

Rozwiązanie przy zadanym dogodnym wektorze własnym​

Aby zrozumieć, jak możemy rozwiązać problem znajdowania rzędu za pomocą estymacji fazy, zacznijmy od założenia, że uruchamiamy procedurę estymacji fazy na operacji MaM_a używając wektora własnego ∣ψ1⟩\vert\psi_1\rangle. Zdobycie tego wektora własnego nie jest łatwe, jak się okaże, więc nie będzie to koniec historii — ale warto od tego zacząć.

Wartość własna operacji MaM_a odpowiadająca wektorowi własnemu ∣ψ1⟩\vert \psi_1\rangle wynosi

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

To znaczy ωr=e2πiθ\omega_r = e^{2\pi i \theta} dla θ=1/r.\theta = 1/r. Zatem, jeśli uruchomimy procedurę estymacji fazy na MaM_a używając wektora własnego ∣ψ1⟩,\vert\psi_1\rangle, otrzymamy przybliżenie 1/r.1/r. Obliczając odwrotność będziemy w stanie poznać rr — pod warunkiem, że nasze przybliżenie jest wystarczająco dobre.

Bardziej szczegółowo: gdy uruchamiamy procedurę estymacji fazy z mm kubitami sterującymi, otrzymujemy liczbę y∈{0,…,2m−1}y\in\{0,\ldots,2^m-1\}. Następnie przyjmujemy y/2my/2^m jako przybliżenie θ\theta, którym w rozważanym przypadku jest 1/r1/r. Aby z tego przybliżenia odgadnąć, czym jest rr, naturalną rzeczą jest obliczenie odwrotności naszego przybliżenia i zaokrąglenie do najbliższej liczby całkowitej.

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

Przykładowo, załóżmy, że r=6r = 6 i wykonujemy estymację fazy na MaM_a z wektorem własnym ∣ψ1⟩\vert\psi_1\rangle używając m=5m = 5 bitów sterujących. Najlepszym 55-bitowym przybliżeniem 1/r=1/61/r = 1/6 jest 5/325/32, i mamy dość dużą szansę (około 68%68\% w tym przypadku) uzyskać wynik y=5y=5 z estymacji fazy. Mamy

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

a zaokrąglenie do najbliższej liczby całkowitej daje 66, co jest prawidłową odpowiedzią.

Z drugiej strony, jeśli nie użyjemy wystarczającej precyzji, możemy nie otrzymać prawidłowej odpowiedzi. Na przykład, jeśli weźmiemy m=4m = 4 kubity sterujące w estymacji fazy, możemy uzyskać najlepsze 44-bitowe przybliżenie 1/r=1/61/r = 1/6, które wynosi 3/163/16. Wzięcie odwrotności daje

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

a zaokrąglenie do najbliższej liczby całkowitej daje błędną odpowiedź 55.

Jak dużej precyzji potrzebujemy zatem, aby uzyskać prawidłową odpowiedź? Wiemy, że rząd rr jest liczbą całkowitą, i intuicyjnie mówiąc potrzebujemy precyzji wystarczającej do odróżnienia 1/r1/r od pobliskich możliwości, w tym 1/(r+1)1/(r+1) i 1/(r−1)1/(r-1). Najbliższą liczbą do 1/r1/r, którą musimy się przejmować, jest 1/(r+1)1/(r+1), a odległość między tymi dwiema liczbami wynosi

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

Zatem, jeśli chcemy mieć pewność, że nie pomylimy 1/r1/r z 1/(r+1)1/(r+1), wystarczy użyć precyzji wystarczającej do zagwarantowania, że najlepsze przybliżenie y/2my/2^m liczby 1/r1/r jest bliższe 1/r1/r niż 1/(r+1)1/(r+1). Jeśli użyjemy na tyle dużej precyzji, że

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

tak aby błąd był mniejszy niż połowa odległości między 1/r1/r a 1/(r+1)1/(r+1), wtedy y/2my/2^m będzie bliższe 1/r1/r niż jakiejkolwiek innej możliwości, w tym 1/(r+1)1/(r+1) i 1/(r−1)1/(r-1).

Możemy to dodatkowo zweryfikować w następujący sposób. Załóżmy, że

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

dla ε\varepsilon spełniającego

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

Gdy weźmiemy odwrotność, otrzymamy

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

Maksymalizując licznik i minimalizując mianownik, możemy ograniczyć, jak daleko jesteśmy od r,r, w następujący sposób.

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

Jesteśmy w odległości mniejszej niż 1/21/2 od rr, więc zgodnie z oczekiwaniami otrzymamy rr po zaokrągleniu.

Niestety, ponieważ nie znamy jeszcze r,r, nie możemy go użyć do określenia, jakiej dokładności potrzebujemy. Zamiast tego możemy wykorzystać fakt, że rr musi być mniejsze niż N,N, aby zapewnić użycie wystarczającej precyzji. W szczególności, jeśli użyjemy dokładności wystarczającej do zagwarantowania, że najlepsze przybliżenie y/2my/2^m liczby 1/r1/r spełnia

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

to będziemy mieli wystarczającą precyzję, aby poprawnie wyznaczyć rr po wzięciu odwrotności. Przyjęcie m=2lg⁡(N)+1m = 2\operatorname{lg}(N)+1 zapewnia, że mamy dużą szansę uzyskać estymację z taką precyzją przy użyciu metody opisanej wcześniej. (Przyjęcie m=2lg⁡(N)m = 2\operatorname{lg}(N) jest wystarczające, jeśli akceptujemy dolne ograniczenie 40% na prawdopodobieństwo sukcesu.)

Rozwiązanie ogólne​

Jak właśnie zobaczyliśmy, jeśli mamy wektor własny ∣ψ1⟩\vert \psi_1 \rangle operatora MaM_a, możemy poznać rr poprzez estymację fazy, o ile użyjemy wystarczającej liczby kubitów sterujących, aby zrobić to z wystarczającą precyzją. Niestety, nie jest łatwo zdobyć wektor własny ∣ψ1⟩\vert\psi_1\rangle, więc musimy wymyślić, jak postępować dalej.

Załóżmy na moment, że postępujemy tak samo jak powyżej, ale z wektorem własnym ∣ψk⟩\vert\psi_k\rangle zamiast ∣ψ1⟩\vert\psi_1\rangle, dla dowolnego wyboru k∈{0,…,r−1}k\in\{0,\ldots,r-1\}, który zechcemy rozważyć. Wynik, jaki otrzymamy z procedury estymacji fazy, będzie przybliżeniem

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

Przy założeniu, że nie znamy ani kk, ani rr, może to pozwolić nam zidentyfikować rr albo nie. Na przykład, jeśli k=0k = 0, otrzymamy przybliżenie y/2my/2^m do 00, co niestety nic nam nie mówi. To jest jednak nietypowy przypadek; dla innych wartości kk będziemy w stanie przynajmniej dowiedzieć się czegoś o rr.

Możemy użyć algorytmu znanego jako algorytm ułamków łańcuchowych, aby zamienić nasze przybliżenie y/2my/2^m na pobliskie ułamki — w tym k/r,k/r, jeśli przybliżenie jest wystarczająco dobre. Nie będziemy tutaj wyjaśniać algorytmu ułamków łańcuchowych. Zamiast tego, oto sformułowanie znanego faktu dotyczącego tego algorytmu.

Fakt

Dla danej liczby całkowitej N≥2N\geq 2 i liczby rzeczywistej α∈(0,1)\alpha\in(0,1), istnieje co najwyżej jeden wybór liczb całkowitych u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} spełniających v≠0v\neq 0 i gcd⁡(u,v)=1\gcd(u,v)=1 oraz ∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dla danych α\alpha i NN, algorytm ułamków łańcuchowych znajduje uu i vv, albo zgłasza, że nie istnieją. Algorytm ten można zaimplementować jako obwód boolowski o rozmiarze O((lg⁡(N))3)O((\operatorname{lg}(N))^3).

Jeśli mamy bardzo bliskie przybliżenie y/2my/2^m wartości k/rk/r i uruchamiamy algorytm ułamków łańcuchowych dla NN i α=y/2m\alpha = y/2^m, otrzymamy uu i vv, jak opisano w powyższym fakcie. Analiza tego faktu pozwala nam wywnioskować, że

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

Zauważmy w szczególności, że niekoniecznie poznajemy kk i rr, poznajemy jedynie k/rk/r w postaci nieskracalnej.

Na przykład, jak już zauważyliśmy, niczego się nie dowiemy z k=0k=0. Ale to jedyna wartość kk, dla której tak się dzieje. Gdy kk jest niezerowe, może mieć wspólne czynniki z rr, ale liczba vv, którą otrzymujemy z algorytmu ułamków łańcuchowych, musi przynajmniej dzielić rr.

Nie jest to oczywiste, ale jest prawdą, że jeśli mamy zdolność poznania uu i vv dla u/v=k/ru/v = k/r dla k∈{0,…,r−1}k\in\{0,\ldots,r-1\} wybranego jednostajnie losowo, to z dużym prawdopodobieństwem będziemy w stanie odzyskać rr po zaledwie kilku próbkach. W szczególności, jeśli naszym zgadnięciem dla rr jest najmniejsza wspólna wielokrotność wszystkich wartości mianownika vv, które obserwujemy, to z dużym prawdopodobieństwem będziemy mieli rację. Intuicyjnie mówiąc, niektóre wartości kk nie są dobre, ponieważ mają wspólne czynniki z rr, a te wspólne czynniki są przed nami ukryte, gdy poznajemy uu i vv. Ale losowe wybory kk raczej nie będą ukrywać czynników rr przez długi czas, a prawdopodobieństwo, że nie zgadniemy rr poprawnie, biorąc najmniejszą wspólną wielokrotność obserwowanych mianowników, spada wykładniczo wraz z liczbą próbek.

Pozostaje rozwiązać problem, jak zdobyć wektor własny ∣ψk⟩\vert\psi_k\rangle operatora Ma,M_a, na którym uruchomimy procedurę estymacji fazy. Jak się okazuje, wcale nie musimy ich tworzyć!

Zamiast tego uruchomimy procedurę estymacji fazy na stanie ∣1⟩\vert 1\rangle, przez co rozumiemy nn-bitowe binarne kodowanie liczby 11, zamiast wektora własnego ∣ψ⟩\vert\psi\rangle operatora MaM_a. Do tej pory mówiliśmy tylko o uruchamianiu procedury estymacji fazy na konkretnym wektorze własnym, ale nic nie stoi na przeszkodzie, aby uruchomić tę procedurę na stanie wejściowym, który nie jest wektorem własnym MaM_a, i to właśnie robimy tutaj ze stanem ∣1⟩\vert 1\rangle. (Nie jest on wektorem własnym MaM_a, chyba że a=1a=1, czym nie będziemy zainteresowani.)

Uzasadnieniem wyboru stanu ∣1⟩\vert 1\rangle zamiast wektora własnego MaM_a jest to, że następujące równanie jest prawdziwe.

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

Jednym ze sposobów weryfikacji tego równania jest porównanie iloczynów skalarnych obu stron z każdym standardowym stanem bazowym, używając wzorów wspomnianych wcześniej w lekcji, aby pomóc w ocenie wyników dla prawej strony. W konsekwencji otrzymamy dokładnie te same wyniki pomiarów, jak gdybyśmy wybrali k∈{0,…,r−1}k\in\{0,\ldots,r-1\} jednostajnie losowo i użyli ∣ψk⟩\vert\psi_k\rangle jako wektora własnego.

Bardziej szczegółowo, wyobraźmy sobie, że uruchamiamy procedurę estymacji fazy ze stanem ∣1⟩\vert 1\rangle zamiast jednego z wektorów własnych ∣ψk⟩\vert\psi_k\rangle. Po wykonaniu odwrotnej kwantowej transformaty Fouriera pozostaje nam stan

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

gdzie

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

Wektor ∣γk⟩\vert\gamma_k\rangle reprezentuje stan górnych mm kubitów po wykonaniu na nich odwrotności kwantowej transformaty Fouriera.

Zatem, dzięki temu, że {∣ψ0⟩,…,∣ψr−1⟩}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} jest zbiorem ortonormalnym, stwierdzamy, że pomiar górnych mm kubitów daje przybliżenie y/2my/2^m wartości k/r,k/r, gdzie k∈{0,…,r−1}k\in\{0,\ldots,r-1\} jest wybierane jednostajnie losowo. Jak już omówiliśmy, pozwala to nam poznać rr z wysokim stopniem pewności po kilku niezależnych uruchomieniach, co było naszym celem.

Całkowity koszt​

Koszt implementacji każdej kontrolowanej operacji unitarnej MakM_a^k wynosi O(n2)O(n^2). Mamy mm kontrolowanych operacji unitarnych, a ponieważ m=O(n)m = O(n), całkowity koszt kontrolowanych operacji unitarnych wynosi O(n3)O(n^3). Dodatkowo mamy mm bramek Hadamarda (które dają wkład O(n)O(n) do kosztu), a odwrotna kwantowa transformata Fouriera daje wkład O(n2)O(n^2) do kosztu. Zatem koszt kontrolowanych operacji unitarnych dominuje nad kosztem całej procedury — który w związku z tym wynosi O(n3)O(n^3).

Oprócz samego obwodu kwantowego po drodze trzeba wykonać kilka klasycznych obliczeń. Obejmuje to obliczenie potęg aka^k w ZN\mathbb{Z}_N dla k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1}, które są potrzebne do skonstruowania kontrolowanych bramek unitarnych, a także algorytm ułamków łańcuchowych przekształcający przybliżenia θ\theta na ułamki. Obliczenia te mogą być wykonane przez obwody Boole'a o łącznym koszcie O(n3)O(n^3).

Jak to zwykle bywa, wszystkie te ograniczenia można poprawić, używając asymptotycznie szybkich algorytmów; podane ograniczenia zakładają stosowanie standardowych algorytmów dla podstawowych operacji arytmetycznych.

Faktoryzacja przez znajdowanie rzędu​

Ostatnia rzecz, którą musimy omówić, to jak rozwiązanie problemu znajdowania rzędu pomaga nam w faktoryzacji. Ta część jest całkowicie klasyczna — nie ma w niej nic specyficznie związanego z obliczeniami kwantowymi.

Oto podstawowa idea. Chcemy rozłożyć liczbę NN na czynniki, i możemy to zrobić rekurencyjnie. Dokładniej, możemy skupić się na zadaniu rozszczepienia NN, co oznacza znalezienie dowolnych dwóch liczb całkowitych b,c≥2b,c\geq 2, dla których N=bcN = bc. Nie jest to możliwe, jeśli NN jest liczbą pierwszą, ale możemy najpierw efektywnie sprawdzić, czy NN jest pierwsze, używając algorytmu testowania pierwszości, a jeśli NN nie jest liczbą pierwszą, spróbujemy ją rozszczepić. Po rozszczepieniu NN możemy po prostu zastosować rekurencję na bb i cc, aż wszystkie nasze czynniki będą pierwsze i otrzymamy rozkład NN na czynniki pierwsze.

Rozszczepianie liczb parzystych jest łatwe: po prostu zwracamy 22 i N/2N/2.

Łatwo jest również rozszczepiać potęgi doskonałe, czyli liczby postaci N=sjN = s^j dla liczb całkowitych s,j≥2,s,j\geq 2, po prostu poprzez przybliżanie pierwiastków N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, i tak dalej, oraz sprawdzanie pobliskich liczb całkowitych jako kandydatów na s.s. Nie musimy posuwać się dalej niż log⁡(N)\log(N) kroków w tym ciągu, ponieważ w tym momencie pierwiastek spada poniżej 22 i nie ujawni dodatkowych kandydatów.

Dobrze, że potrafimy zrobić obie te rzeczy, ponieważ znajdowanie rzędu nie pomoże nam w faktoryzacji liczb parzystych ani potęg liczb pierwszych, gdzie liczba ss akurat jest pierwsza. Jeśli jednak NN jest nieparzysta i nie jest potęgą liczby pierwszej, znajdowanie rzędu pozwala nam rozszczepić NN.

Algorytm probabilistyczny rozszczepiający nieparzystą, złożoną liczbę całkowitą N, która nie jest potęgą liczby pierwszej
  1. Wybierz losowo a∈{2,…,N−1}a\in\{2,\ldots,N-1\}.

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

  3. Jeśli d>1d > 1, to zwróć b=db = d i c=N/dc = N/d i zatrzymaj się. W przeciwnym razie przejdź do następnego kroku, wiedząc, że a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

  4. Niech rr będzie rzędem aa modulo NN. (Tutaj potrzebujemy znajdowania rzędu.)

  5. Jeśli rr jest parzyste:

    5.1 Oblicz x=ar/2−1x = a^{r/2} - 1 modulo NN
    5.2 Oblicz d=gcd⁡(x,N)d = \gcd(x,N).
    5.3 Jeśli d>1d>1, to zwróć b=db=d i c=N/dc = N/d i zatrzymaj się.

  6. Jeśli ten punkt został osiągnięty, algorytm nie znalazł czynnika NN.

Pojedyncze uruchomienie tego algorytmu może nie znaleźć czynnika NN. Konkretnie, dzieje się tak w dwóch sytuacjach:

  • Rząd aa modulo NN jest nieparzysty.
  • Rząd aa modulo NN jest parzysty oraz gcd⁡(ar/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Korzystając z podstawowej teorii liczb, można udowodnić, że dla losowego wyboru aa, z prawdopodobieństwem co najmniej 1/21/2 żadne z tych zdarzeń nie zachodzi. W rzeczywistości prawdopodobieństwo, że którekolwiek ze zdarzeń zachodzi, wynosi co najwyżej 2−(m−1)2^{-(m-1)}, gdzie mm jest liczbą różnych czynników pierwszych NN, co jest powodem, dla którego potrzebne jest założenie, że NN nie jest potęgą liczby pierwszej. (Założenie, że NN jest nieparzyste, jest również wymagane, aby ten fakt był prawdziwy.)

Oznacza to, że każde uruchomienie ma co najmniej 50% szans na rozszczepienie NN. Dlatego, jeśli uruchomimy algorytm tt razy, losowo wybierając aa za każdym razem, uda nam się rozszczepić NN z prawdopodobieństwem co najmniej 1−2−t1 - 2^{-t}.

Podstawowa idea algorytmu jest następująca. Jeśli wybierzemy a,a, dla którego rząd rr liczby aa modulo NN jest parzysty, to r/2r/2 jest liczbą całkowitą i możemy rozważyć liczby

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

Korzystając ze wzoru Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1), wnioskujemy, że

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

Wiemy, że ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 z definicji rzędu — co jest innym sposobem powiedzenia, że NN dzieli bez reszty ar−1a^r - 1. Oznacza to, że NN dzieli bez reszty iloczyn

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

Aby tak było, wszystkie czynniki pierwsze NN muszą być również czynnikami pierwszymi ar/2−1a^{r/2} - 1 lub ar/2+1a^{r/2} + 1 (lub obu) — a dla losowego wyboru aa okazuje się, że jest mało prawdopodobne, aby wszystkie czynniki pierwsze NN dzieliły jeden z wyrazów, a żaden nie dzielił drugiego. W przeciwnym razie, o ile niektóre czynniki pierwsze NN dzielą pierwszy wyraz, a niektóre dzielą drugi, będziemy w stanie znaleźć nietrywialny czynnik NN, obliczając NWD z pierwszym wyrazem.