Перейти до основного вмісту

Алгоритм Шора

Тепер звернімо увагу на задачу факторизації цілих чисел і подивимося, як її можна ефективно розв'язати на квантовому комп'ютері за допомогою оцінки фази. Алгоритм, який ми отримаємо, — це алгоритм Шора для факторизації цілих чисел. Шор не описував свій алгоритм саме в термінах оцінки фази, але це природний та інтуїтивний спосіб пояснити, як він працює.

Почнемо з обговорення проміжної задачі, відомої як задача знаходження порядку, і побачимо, як оцінка фази дає її розв'язок. Потім з'ясуємо, як ефективний розв'язок задачі знаходження порядку дає нам ефективний розв'язок задачі факторизації цілих чисел. (Коли розв'язок однієї задачі забезпечує розв'язок іншої подібним чином, кажуть, що друга задача зводиться до першої — тобто в даному випадку ми зводимо факторизацію цілих чисел до знаходження порядку.) Ця друга частина алгоритму Шора взагалі не використовує квантові обчислення — вона цілком класична. Квантові обчислення потрібні лише для розв'язання задачі знаходження порядку.

Задача знаходження порядку

Деякі основи теорії чисел

Щоб пояснити задачу знаходження порядку та те, як її можна розв'язати за допомогою оцінки фази, корисно почати з кількох базових понять теорії чисел і попутно ввести зручні позначення.

Для початку: для будь-якого заданого натурального числа NN визначимо множину ZN\mathbb{Z}_N таким чином.

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

Наприклад, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; і так далі.

Це множини чисел, але можна розглядати їх ширше. Зокрема, можна думати про арифметичні операції над ZN\mathbb{Z}_N, такі як додавання та множення — і якщо ми домовимося завжди брати результати за модулем NN (тобто ділити на NN і брати залишок як результат), ми завжди залишатимемося в цій множині під час виконання цих операцій. Дві конкретні операції — додавання та множення, обидві за модулем NN, — перетворюють ZN\mathbb{Z}_N на кільце, яке є фундаментально важливим типом об'єкта в алгебрі.

Наприклад, 33 і 55 — елементи Z7\mathbb{Z}_7, і якщо ми перемножимо їх, отримаємо 35=153\cdot 5 = 15, що дає залишок 11 при діленні на 7.7. Іноді це записують так.

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

Але можна також просто писати 35=13 \cdot 5 = 1, якщо зрозуміло, що ми працюємо в Z7\mathbb{Z}_7, — щоб позначення були якомога простішими.

Як приклад, ось таблиці додавання та множення для Z6.\mathbb{Z}_6.

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

Серед NN елементів ZN\mathbb{Z}_N особливими є елементи aZNa\in\mathbb{Z}_N, що задовольняють gcd(a,N)=1.\gcd(a,N) = 1. Множину, що містить ці елементи, часто позначають зірочкою ось так.

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

Якщо зосередитися на операції множення, множина ZN\mathbb{Z}_N^{\ast} утворює групу — зокрема абелеву групу — що є ще одним важливим типом об'єкта в алгебрі. Відомий базовий факт про ці множини (і скінченні групи загалом): якщо взяти будь-який елемент aZNa\in\mathbb{Z}_N^{\ast} і послідовно множити aa на себе, ми врешті-решт завжди отримаємо число 1.1.

Як перший приклад, розглянемо N=6.N=6. Маємо 5Z65\in\mathbb{Z}_6^{\ast}, бо gcd(5,6)=1\gcd(5,6) = 1, і якщо перемножити 55 на себе, отримаємо 1,1, що підтверджує таблиця вище.

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

Як другий приклад, розглянемо N=21.N = 21. Якщо перебрати числа від 00 до 2020, ті з них, що мають НСД рівний 11 з 2121, такі.

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

Для кожного з цих елементів можна піднести це число до деякого натурального степеня й отримати 1.1. Ось найменші степені, для яких це виконується:

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}

Звичайно, ми працюємо в Z21\mathbb{Z}_{21} для всіх цих рівнянь, що ми не стали вказувати — це вважається неявним, щоб не захаращувати запис. Так само будемо робити і далі впродовж усього уроку.

Формулювання задачі та зв'язок з оцінкою фази

Тепер можна сформулювати задачу знаходження порядку.

Знаходження порядку

Вхід: натуральні числа NN і aa, що задовольняють gcd(N,a)=1\gcd(N,a) = 1
Вихід: найменше натуральне число rr таке, що ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

Інакше кажучи, у термінах щойно введених позначень, нам дано aZNa \in \mathbb{Z}_N^{\ast} і ми шукаємо найменше натуральне число rr таке, що ar=1.a^r = 1. Це число rr називається порядком aa за модулем N.N.

Щоб пов'язати задачу знаходження порядку з оцінкою фази, подумаймо про операцію, визначену на системі, класичні стани якої відповідають ZN\mathbb{Z}_N, де ми множимо на фіксований елемент aZN.a\in\mathbb{Z}_N^{\ast}.

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

Для ясності: ми виконуємо множення в ZN\mathbb{Z}_N, тому неявно мається на увазі, що ми беремо добуток за модулем NN всередині кета у правій частині рівняння.

Наприклад, якщо взяти N=15N = 15 і a=2a=2, то дія M2M_2 на стандартний базис {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} така.

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

Це унітарна операція за умови gcd(a,N)=1\gcd(a,N)=1; вона переставляє елементи стандартного базису {0,,N1}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, тому як матриця є матрицею перестановки. З її визначення очевидно, що ця операція детермінована, а простий спосіб переконатися в її оборотності — подумати про порядок rr елемента aa за модулем NN і помітити, що обернена до MaM_a — це Mar1.M_a^{r-1}.

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

Є ще один спосіб думати про обернену операцію, що не потребує знання rr (яке, зрештою, і є тим, що ми намагаємося обчислити). Для кожного елемента aZNa\in\mathbb{Z}_N^{\ast} завжди існує єдиний елемент bZNb\in\mathbb{Z}_N^{\ast}, що задовольняє ab=1.ab=1. Цей елемент bb позначаємо a1a^{-1}, і він обчислюється ефективно; розширення алгоритму Евкліда для НСД робить це з вартістю, квадратичною відносно lg(N).\operatorname{lg}(N). Отже,

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

Таким чином, операція MaM_a є і детермінованою, і оборотною. Це означає, що вона описується матрицею перестановки і тому є унітарною.

Тепер подумаймо про власні вектори та власні значення операції MaM_a, припускаючи, що aZN.a\in\mathbb{Z}_N^{\ast}. Як щойно було доведено, це припущення говорить нам, що MaM_a унітарна.

Операція MaM_a має NN власних значень, можливо, включаючи одне й те саме власне значення, повторене кілька разів, і загалом є певна свобода у виборі відповідних власних векторів — але нам не потрібно переймалися всіма можливостями. Почнімо просто і визначимо лише один власний вектор Ma.M_a.

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

Число rr — це порядок aa за модулем NN, тут і далі в цьому уроці. Власне значення, відповідне цьому власному вектору, дорівнює 11, оскільки він не змінюється при множенні на a.a.

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

Це відбувається тому, що ar=1a^r = 1, тому кожен стан стандартного базису ak\vert a^k \rangle переходить у ak+1\vert a^{k+1} \rangle при kr1k\leq r-1, а ar1\vert a^{r-1} \rangle повертається назад у 1.\vert 1\rangle. Образно кажучи, це ніби ми повільно перемішуємо ψ0\vert \psi_0 \rangle, але він уже повністю перемішаний, тому нічого не змінюється.

Ось ще один приклад власного вектора Ma.M_a. Цей є більш цікавим у контексті знаходження порядку та оцінки фази.

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

Альтернативно, цей вектор можна записати за допомогою суми ось так.

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

Тут ми бачимо, як комплексне число ωr=e2πi/r\omega_r = e^{2\pi i/r} виникає природним чином завдяки тому, як множення на aa працює за модулем N.N. Цього разу відповідне власне значення дорівнює ωr.\omega_r. Щоб переконатися в цьому, спочатку обчислимо таке.

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

Потім, оскільки ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 і ar=1=a0\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, бачимо, що

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

отже Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Використовуючи ті самі міркування, можна знайти додаткові пари власний вектор/власне значення для Ma.M_a. Для будь-якого вибору j{0,,r1}j\in\{0,\ldots,r-1\} маємо, що

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

є власним вектором MaM_a, відповідне власне значення якого дорівнює ωrj.\omega_r^j.

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

У MaM_a є й інші власні вектори, але нам не потрібно ними переймалися — ми зосередимося виключно на власних векторах ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle, які ми щойно знайшли.

Знаходження порядку через оцінку фази

Щоб розв'язати задачу знаходження порядку для заданого вибору aZNa\in\mathbb{Z}_N^{\ast}, можна застосувати процедуру оцінки фази до операції Ma.M_a.

Для цього потрібно ефективно реалізувати квантовою схемою не тільки MaM_a, а й Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, і так далі — стільки, скільки потрібно для отримання достатньо точної оцінки з процедури оцінки фази. Тут ми пояснимо, як це можна зробити, і з'ясуємо, скільки точності потрібно, трохи пізніше.

Почнімо з операції MaM_a самої по собі. Природно, оскільки ми працюємо з моделлю квантових схем, ми будемо використовувати двійкову нотацію для кодування чисел від 00 до N1.N-1. Найбільше число, яке нам потрібно закодувати, — N1N-1, тому кількість потрібних бітів:

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

Наприклад, якщо N=21N = 21, маємо n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Ось як виглядає кодування елементів Z21\mathbb{Z}_{21} у вигляді двійкових рядків довжини 55.

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

А тепер — точне визначення того, як MaM_a визначається як nn-кубітна операція.

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

Суть у тому, що хоча нас цікавить лише те, як MaM_a працює для 0,,N1\vert 0\rangle,\ldots,\vert N-1\rangle, ми все ж маємо вказати, як вона діє на решту 2nN2^n - N станів стандартного базису — і зробити це так, щоб операція залишалася унітарною. Визначення MaM_a таким чином, що вона нічого не робить з рештою станів стандартного базису, вирішує цю задачу.

Використовуючи алгоритми для цілочисельного множення та ділення, розглянуті в попередньому уроці, разом із методологією їх оборотних реалізацій без «сміттєвих» кубітів, можна побудувати квантову схему, що виконує MaM_a для будь-якого вибору aZNa\in\mathbb{Z}_N^{\ast}, з вартістю O(n2).O(n^2). Ось один зі способів це зробити.

  1. Побудувати схему для виконання операції

    xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    де

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

    використовуючи метод, описаний у попередньому уроці. Це дає нам схему розміру O(n2).O(n^2).

  2. Поміняти місцями дві nn-кубітні системи за допомогою nn вентилів swap для поперемінного обміну кубітів.

  3. Аналогічно до першого кроку, побудувати схему для операції

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

    де a1a^{-1} — обернений до aa в ZN.\mathbb{Z}_N^{\ast}.

Ініціалізувавши нижні nn кубітів і склавши три кроки, отримуємо таке перетворення:

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

Метод потребує допоміжних (workspace) кубітів, але наприкінці вони повертаються до початкового стану, що дозволяє використовувати ці схеми для оцінки фази. Загальна вартість отриманої схеми — O(n2).O(n^2).

Щоб виконати Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, і так далі, можна використовувати той самий метод, тільки замінити aa на a2,a^2, a4,a^4, a8,a^8, і так далі як елементи ZN.\mathbb{Z}_N^{\ast}. Тобто для будь-якого степеня kk можна побудувати схему для MakM_a^k не ітеруванням схеми для MaM_a kk разів, а обчисленням b=akZNb = a^k \in \mathbb{Z}_N^{\ast} і подальшим використанням схеми для Mb.M_b.

Обчислення степенів akZNa^k \in \mathbb{Z}_N — це задача модульного піднесення до степеня, згадана в попередньому уроці. Це обчислення можна виконати класично, використовуючи алгоритм модульного піднесення до степеня, згаданий у попередньому уроці (який у обчислювальній теорії чисел часто називають алгоритмом швидкого піднесення до степеня). Насправді нам потрібні лише степені-степені-двійки числа aa, а саме a2,a4,a2m1ZNa^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, і ці степені можна отримати послідовним зведенням у квадрат m1m-1 разів. Кожне зведення в квадрат може бути виконане булевою схемою розміру O(n2).O(n^2).

По суті, ми фактично перекладаємо задачу ітерування MaM_a до 2m12^{m-1} разів на ефективне класичне обчислення. І добре, що це можливо! Для довільного вибору квантової схеми в задачі оцінки фази це, швидше за все, неможливо — і тоді отримана вартість для оцінки фази зростає експоненційно залежно від кількості контрольних кубітів m.m.

Розв'язання при зручному власному векторі

Щоб зрозуміти, як можна розв'язати задачу знаходження порядку за допомогою оцінки фази, почнімо з припущення, що ми запускаємо процедуру оцінки фази для операції MaM_a з використанням власного вектора ψ1.\vert\psi_1\rangle. Як виявляється, отримати цей власний вектор нелегко, тому це ще не кінець розповіді — але тут корисно почати.

Власне значення MaM_a, відповідне власному вектору ψ1\vert \psi_1\rangle, дорівнює

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

Тобто ωr=e2πiθ\omega_r = e^{2\pi i \theta} при θ=1/r.\theta = 1/r. Отже, якщо запустити процедуру оцінки фази для MaM_a з власним вектором ψ1\vert\psi_1\rangle, ми отримаємо наближення до 1/r.1/r. Обчисливши обернене значення, ми зможемо дізнатися rr — за умови, що наше наближення достатньо точне.

Детальніше: коли ми запускаємо процедуру оцінки фази з mm контрольними кубітами, ми отримуємо число y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Потім беремо y/2my/2^m як здогадку для θ\theta, що у нашому випадку дорівнює 1/r.1/r. Щоб з'ясувати, чому дорівнює rr за цим наближенням, природним є обчислення оберненого від нашого наближення та округлення до найближчого цілого.

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

Наприклад, припустимо, що r=6r = 6 і ми виконуємо оцінку фази для MaM_a з власним вектором ψ1\vert\psi_1\rangle з використанням m=5m = 5 контрольних бітів. Найкраще 55-бітне наближення до 1/r=1/61/r = 1/6 — це 5/325/32, і ми маємо непогані шанси (близько 68%68\% у цьому випадку) отримати результат y=5y=5 з оцінки фази. Маємо

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

і округлення до найближчого цілого дає 66, що є правильною відповіддю.

З іншого боку, якщо не використовувати достатньої точності, можна не отримати правильної відповіді. Наприклад, якщо взяти m=4m = 4 контрольні кубіти в оцінці фази, можна отримати найкраще 44-бітне наближення до 1/r=1/61/r = 1/6, яким є 3/16.3/16. Обчислення оберненого дає

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

і округлення до найближчого цілого дає неправильну відповідь 5.5.

То скільки ж точності потрібно, щоб отримати правильну відповідь? Ми знаємо, що порядок rr — ціле число, і інтуїтивно кажучи нам потрібно достатньо точності, щоб відрізнити 1/r1/r від близьких значень, зокрема 1/(r+1)1/(r+1) і 1/(r1).1/(r-1). Найближче до 1/r1/r число, про яке варто турбуватися, — це 1/(r+1)1/(r+1), і відстань між цими двома числами:

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

Отже, якщо ми хочемо переконатися, що не сплутаємо 1/r1/r з 1/(r+1)1/(r+1), достатньо використовувати таку точність, щоб гарантувати, що найкраще наближення y/2my/2^m до 1/r1/r ближче до 1/r1/r, ніж до 1/(r+1).1/(r+1). Якщо ми використовуємо достатню точність, щоб гарантувати, що

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

тобто похибка менша за половину відстані між 1/r1/r і 1/(r+1)1/(r+1), то y/2my/2^m буде ближче до 1/r1/r, ніж до будь-якої іншої можливості, включаючи 1/(r+1)1/(r+1) і 1/(r1).1/(r-1).

Перевіримо це таким чином. Припустимо, що

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

для ε\varepsilon, що задовольняє

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

Обчисливши обернене, отримуємо

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

Максимізуючи чисельник і мінімізуючи знаменник, можна обмежити відстань від rr таким чином.

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

Ми відхилилися від rr менш ніж на 1/21/2, тому, як і очікувалося, при округленні отримаємо r.r.

На жаль, оскільки ми ще не знаємо rr, ми не можемо використовувати його для визначення потрібної нам точності. Натомість можна скористатися тим фактом, що rr менше за NN, щоб гарантувати достатню точність. Зокрема, якщо ми використовуємо достатню точність, щоб гарантувати, що найкраще наближення y/2my/2^m до 1/r1/r задовольняє

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

то ми матимемо достатньо точності, щоб правильно визначити rr при обчисленні оберненого. Вибір m=2lg(N)+1m = 2\operatorname{lg}(N)+1 гарантує, що ми маємо великі шанси отримати оцінку з такою точністю, використовуючи описаний вище метод. (Вибір m=2lg(N)m = 2\operatorname{lg}(N) достатній, якщо нас влаштовує нижня межа 40% для ймовірності успіху.)

Загальний розв'язок

Як ми щойно побачили, якщо ми маємо власний вектор ψ1\vert \psi_1 \rangle оператора Ma,M_a, ми можемо дізнатися rr за допомогою оцінки фази, за умови, що використовуємо достатньо керуючих кубітів для необхідної точності. На жаль, отримати власний вектор ψ1\vert\psi_1\rangle непросто, тому потрібно з'ясувати, як діяти далі.

Уявімо на мить, що ми діємо так само, як вище, але замість ψ1\vert\psi_1\rangle беремо власний вектор ψk\vert\psi_k\rangle для будь-якого k{0,,r1}k\in\{0,\ldots,r-1\} на наш вибір. Результат, який ми отримаємо з процедури оцінки фази, буде наближенням

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

Припускаючи, що ні k,k, ні rr нам невідомі, це може або не може дозволити нам визначити r.r. Наприклад, якщо k=0,k = 0, ми отримаємо наближення y/2my/2^m до 0,0, що, на жаль, нічого нам не скаже. Проте це рідкісний випадок; для інших значень kk ми принаймні зможемо дізнатися щось про r.r.

Ми можемо скористатися алгоритмом, відомим як алгоритм ланцюгових дробів, щоб перетворити наближення y/2my/2^m на близькі дроби — зокрема k/r,k/r, якщо наближення достатньо точне. Пояснювати алгоритм ланцюгових дробів тут ми не будемо. Натомість наведемо твердження про відомий факт стосовно цього алгоритму.

Факт

Нехай дано ціле число N2N\geq 2 та дійсне число α(0,1).\alpha\in(0,1). Тоді існує щонайбільше один вибір цілих чисел u,v{0,,N1}u,v\in\{0,\ldots,N-1\} з v0v\neq 0 та gcd(u,v)=1,\gcd(u,v)=1, що задовольняє αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. За заданими α\alpha та NN алгоритм ланцюгових дробів знаходить uu та v,v, або повідомляє, що вони не існують. Цей алгоритм може бути реалізований у вигляді булевої схеми розміром O((lg(N))3).O((\operatorname{lg}(N))^3).

Якщо ми маємо дуже точне наближення y/2my/2^m до k/rk/r і запустимо алгоритм ланцюгових дробів для NN та α=y/2m,\alpha = y/2^m, ми отримаємо uu та v,v, як описано у твердженні. Аналіз цього факту дозволяє зробити висновок, що

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

Зверни увагу: ми не обов'язково дізнаємося kk та rr окремо — ми дізнаємося лише k/rk/r у найменшому спільному вигляді.

Наприклад, як ми вже зауважили, при k=0k=0 ми нічого не дізнаємося. Але це єдине значення k,k, де так трапляється. Коли kk ненульове, воно може мати спільні множники з r,r, але число v,v, яке ми отримаємо від алгоритму ланцюгових дробів, принаймні ділить r.r.

Це не очевидно, але справді: якщо ми маємо змогу дізнаватися uu та vv для u/v=k/r,u/v = k/r, де k{0,,r1}k\in\{0,\ldots,r-1\} вибирається рівномірно випадково, то після кількох спроб ми, швидше за все, зможемо відновити r.r. Зокрема, якщо наш здогад про rr — це найменше спільне кратне всіх значень знаменника v,v, які ми спостерігаємо, то ми будемо праві з високою ймовірністю. Інтуїтивно, деякі значення kk є «невдалими», бо мають спільні множники з r,r, і ці множники приховані від нас, коли ми дізнаємося uu та v.v. Але випадкові вибори kk навряд чи приховуватимуть множники rr надовго, і ймовірність неправильного здогаду про rr через взяття НСК спостережуваних знаменників зменшується експоненційно зі збільшенням кількості спроб.

Залишається вирішити питання про те, як отримати власний вектор ψk\vert\psi_k\rangle оператора Ma,M_a, на якому запускати процедуру оцінки фази. Виявляється, нам насправді не потрібно їх створювати!

Натомість ми запустимо процедуру оцінки фази на стані 1,\vert 1\rangle, маючи на увазі nn-бітне двійкове кодування числа 1,1, замість власного вектора ψ\vert\psi\rangle оператора Ma.M_a. До цього моменту ми говорили лише про запуск процедури оцінки фази на конкретному власному векторі, але ніщо не заважає нам запускати її на вхідному стані, який не є власним вектором Ma,M_a, — саме це ми й робимо зі станом 1.\vert 1\rangle. (Це не власний вектор Ma,M_a, якщо тільки a=1,a=1, а такий вибір нас не цікавить.)

Обґрунтування вибору стану 1\vert 1\rangle замість власного вектора MaM_a полягає в тому, що справджується таке рівняння:

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

Один зі способів перевірити це рівняння — порівняти скалярні добутки обох частин з кожним стандартним базисним станом, використовуючи формули, згадані раніше в цьому уроці, щоб обчислити результати для правої частини. Внаслідок цього ми отримаємо рівно ті самі результати вимірювань, що й якби ми вибрали k{0,,r1}k\in\{0,\ldots,r-1\} рівномірно випадково та використали ψk\vert\psi_k\rangle як власний вектор.

Розглянемо детальніше: уявімо, що ми запускаємо процедуру оцінки фази зі станом 1\vert 1\rangle замість одного з власних векторів ψk.\vert\psi_k\rangle. Після виконання оберненого квантового перетворення Фур'є ми отримаємо стан

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

де

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

Вектор γk\vert\gamma_k\rangle представляє стан верхніх mm кубітів після виконання оберненого квантового перетворення Фур'є над ними.

Отже, з огляду на те, що {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} є ортонормованим набором, вимірювання верхніх mm кубітів дає наближення y/2my/2^m до значення k/r,k/r, де k{0,,r1}k\in\{0,\ldots,r-1\} вибирається рівномірно випадково. Як ми вже обговорювали, це дозволяє нам визначити rr з високим ступенем впевненості після кількох незалежних запусків, що і було нашою метою.

Загальна вартість

Вартість реалізації кожної керованої унітарної операції MakM_a^k становить O(n2).O(n^2). Усього є mm керованих унітарних операцій, і m=O(n),m = O(n), тому загальна вартість для керованих унітарних операцій — O(n3).O(n^3). Крім того, є mm воріт Адамара (що вносять O(n)O(n) у вартість), а обернене квантове перетворення Фур'є вносить O(n2).O(n^2). Таким чином, вартість керованих унітарних операцій домінує над вартістю всієї процедури — яка тому складає O(n3).O(n^3).

На додаток до самої квантової схеми є кілька класичних обчислень, які потрібно виконати по ходу. Це включає обчислення степенів aka^k у ZN\mathbb{Z}_N для k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1}, які потрібні для створення керованих унітарних воріт, а також алгоритм ланцюгових дробів, що перетворює наближення θ\theta на дроби. Ці обчислення можна виконати булевими схемами із загальною вартістю O(n3).O(n^3).

Як це зазвичай буває, всі ці оцінки можна покращити за допомогою асимптотично швидких алгоритмів; наведені оцінки припускають використання стандартних алгоритмів для базових арифметичних операцій.

Факторизація через пошук порядку

Останнє, що нам залишається обговорити, — це як розв'язання задачі пошуку порядку допомагає нам факторизувати. Ця частина є повністю класичною — вона не має нічого спеціально квантового.

Ось основна ідея. Ми хочемо факторизувати число N,N, і можемо робити це рекурсивно. Зокрема, ми можемо зосередитися на задачі розщеплення N,N, що означає знаходження двох цілих чисел b,c2,b,c\geq 2, для яких N=bc.N = bc. Це неможливо, якщо NN — просте число, але ми можемо ефективно перевірити простоту NN за допомогою алгоритму тестування простоти, і якщо NN не просте — спробувати його розщепити. Після розщеплення NN ми просто рекурсивно застосовуємо алгоритм до bb та c,c, поки всі множники не стануть простими і ми не отримаємо розклад NN на прості множники.

Розщепити парні числа просто: виводимо 22 та N/2.N/2.

Також легко розщепити досконалі степені, тобто числа вигляду N=sjN = s^j для цілих s,j2,s,j\geq 2, — достатньо наближено обчислити корені N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4N^{1/4} і так далі, перевіряючи сусідні цілі числа як кандидатів для s.s. Не потрібно заходити далі, ніж log(N)\log(N) кроків у цій послідовності, бо на тому етапі корінь стає меншим за 22 і нових кандидатів не виявить.

Добре, що обидві ці речі можливі, бо пошук порядку не допоможе нам факторизувати парні числа або простих степенів, де число ss виявляється простим. Якщо ж NN непарне та не є степенем простого числа, пошук порядку дозволяє нам розщепити N.N.

Імовірнісний алгоритм для розщеплення непарного складеного цілого числа N, яке не є степенем простого
  1. Випадково вибираємо a{2,,N1}.a\in\{2,\ldots,N-1\}.

  2. Обчислюємо d=gcd(a,N).d=\gcd(a,N).

  3. Якщо d>1,d > 1, виводимо b=db = d та c=N/dc = N/d і зупиняємося. Інакше переходимо до наступного кроку, знаючи, що aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Нехай rr — порядок aa за модулем N.N. (Тут нам потрібен пошук порядку.)

  5. Якщо rr парне:

    5.1 Обчислюємо x=ar/21x = a^{r/2} - 1 за модулем NN
    5.2 Обчислюємо d=gcd(x,N).d = \gcd(x,N).
    5.3 Якщо d>1,d>1, виводимо b=db=d та c=N/dc = N/d і зупиняємося.

  6. Якщо досягнуто цього кроку, алгоритм не зміг знайти множник N.N.

Один запуск цього алгоритму може не знайти множника N.N. Зокрема, це трапляється у двох ситуаціях:

  • Порядок aa за модулем NN непарний.
  • Порядок aa за модулем NN парний і gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Використовуючи базову теорію чисел, можна довести, що для випадкового вибору aa з імовірністю принаймні 1/21/2 жодна з цих подій не трапляється. Насправді ймовірність того, що хоча б одна з них трапиться, не перевищує 2(m1),2^{-(m-1)}, де mm — кількість різних простих множників N,N, — саме тому потрібне припущення, що NN не є степенем простого числа. (Припущення про непарність NN також необхідне для справедливості цього факту.)

Це означає, що кожен запуск має принаймні 50% шанс розщепити N.N. Тому, якщо ми запустимо алгоритм tt разів, щоразу випадково вибираючи a,a, ми успішно розщепимо NN з імовірністю принаймні 12t.1 - 2^{-t}.

Основна ідея алгоритму така. Якщо ми вибрали a,a, для якого порядок rr числа aa за модулем NN є парним, то r/2r/2 — ціле число, і ми можемо розглянути числа

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

Використовуючи формулу Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), ми отримуємо, що

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

Ми знаємо, що ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 за визначенням порядку — тобто NN ділить ar1a^r - 1 без залишку. Це означає, що NN ділить добуток

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

Щоб це було правдою, всі прості множники NN мають бути також простими множниками ar/21a^{r/2} - 1 або ar/2+1a^{r/2} + 1 (або обох) — і для випадкового вибору aa малоймовірно, що всі прості множники NN поділять один із доданків і жоден не поділить інший. Інакше, якщо частина простих множників NN ділить перший доданок, а частина — другий, ми зможемо знайти нетривіальний множник N,N, обчисливши НСД з першим доданком.