У меня есть друг, художник, и порой он принимает такую точку зрения, с которой
я не согласен. Он берет цветок и говорит: «Посмотри, как он прекрасен». И тут
же добавляет: «Я, будучи художником, способен видеть красоту цветка. Но ты, бу-
дучи ученым, разбираешь его на части, и он становится скучным». Я думаю, что он
немного ненормальный.
Во-первых, красота, которую видит он, доступна другим людям — в том числе и мне,
в чём я уверен. Несмотря на то, что я, быть может, не так утончён в эстетиче-
ском плане, как он, я всё же могу оценить красоту цветка. Но в то же время я вижу
в цветке гораздо больше него. Я могу представить клетки внутри этого цветка, ко-
торые тоже обладают красотой. Красота существует не только в масштабе одного
сантиметра, но и в гораздо более малых масштабах.
Существуют сложные действия клеток и другие процессы. Интересен тот факт,
что цвета цветка развились в процессе эволюции, чтобы привлекать насекомых для
его опыления; это означает, что насекомые способны видеть цвета. Отсюда возни-
кает новый вопрос: существует ли эстетическое чувство, которым обладаем мы, и
в более низких формах жизни? Знание науки порождает множество интересных во-
просов, так что оно только увеличивает восторг, тайну и благоговение, которое мы
испытываем при виде цветка. Только увеличивает. Я не понимаю, каким образом оно
может уменьшать.
то есть если брать ряд из обратных простых чисел, то он будет расходиться. То есть, если брать и
суммировать обратные простые числа, то можно в сумме плучить любое сколько угодно большое
число! Почему это удивительно? Вы наверняка знаете, что ряд из обратных натуральных чисел
расходится,
n
X
= log n + γ.
i=1
Оказывается теперь, что если брать не все подряд идущие числа, а лишь простые, то тем не
менее ряд будет расходиться, хоть и гораздо медленнее.
В начале 19 века была доказана теорема Лежандра-Гауса-Адамара. Пусть π(n) — число про-
стых чисел, меньших n. Они показали, что π(n) ∼ n/ log n, то есть при n → +∞ эти функции
относительно почти не различаются. Получается, что простых чисел не так уж и мало, и по по-
рядку величины pn = n log n, где pn — n-тое простое число.
Зачем нам эта вся возня с простыми числами? Они отражают глубинную структуру любого
числа. Это и даёт возможность использовать их в криптографии, в алгоритме RSA, который мы
хотим побороть.
В первую очередь, люди хотят, посмотрев на число, быстро определить, простое ли оно. Люди
могут хотеть быстро раскладывать число на простые (как взломщик протокола RSA), а могут и
просто заниматься поиском всех простых чисел меньших n.
Сопутствующие алгоритмы
Какие мы знаем алгоритмы проверки числа N на простоту? Самый простой, trial division — делить
число N на все числа меньше него. Сколько работает такой алгоритм? А можно ли быстрее?
Зачем делить именно до N ? Есть и рандомизированный алгоритм, основанный на тесте Ферма.
Его проходят почти все числа, кроме особенных чисел Кормихаэля. √
3
В вопросе факторизации на классическом компьютере лучший результат: O(e log n ). Это до-
вольно быстро, но всё равно видно, что алгоритм работает как экспонента от длины числа (log n
— по сути число знаков в числе). Если длина числа велика, то сложность растёт очень быстро.
Наконец, поговорим о поиске простых чисел, это делает модифицированное решето Эратосфе-
на, которое работает за O(n log log n), то есть ищет все простые числа меньше n за время, не сильно
превышающее число операций, чтобы просто перечислить эти числа от 0 до n.
Задача: реализуйте рандомизированный алгоритм проверки на простоту, основанный на матой
теореме Ферма.
Задача: реализуйте поиск всех простых чисел меньших n, используя модифицированное ре-
шето Эратосфена. Построим график числа операций от n?
Поиск k
Сначала разберёмся, как быстро решать уравнение
Мы уже поняли, что (p − 1)(q − 1) не делится на три. Это уравнени эквивалентно записи 3k − (p −
1)(q−1)l = 1. Важно понять, что 1 = gcd(3, (p−1)(q−1)). Существует так называемый расширенный
алгоритм Евклида, который позволяет решать уравнения ax + yb = gcd(a, b) относительно x и y.
Это как раз наш случай: справа стоит единица, но ведь это и есть наибольший общий делитель
коэффициентов a = 3, b = (p − 1)(q − 1), а мы ходим найти k и l.
Расширенный алгоритм Евклида действует следующим образом: определим величины r0 =
a, s0 = 1, t0 = 0, r1 = b, s1 = 0, t1 = 1. Далее ri+1 = ri−1 −qi ri , si+1 = si−1 −qi si , ti+1 = ti−1 −qi ti . Это
уравнения в целых числах и всё определено. Когда получится rm = 0, коэффициенты разложения
будут tm−1 и sm−1 .
Почему так? Для коэффициентов ri — это обычный алгоритм Евклида. Из рекуррентного со-
отношения видно, что у (ri−1 , ri ) и (ri , ri+1 ) один gcd. Значит, исходно он был gcd(a, b), а в конце
gcd(rm−1 , 0) = rm−1 = gcd(a, b), то есть при переходе от одной пары остаткой к другой, наибольший
общий делитель не меняется.
Что касается коэффициентов Безу, то можно явно проверить, что для i = 0, 1 выполнено
asi + bti = ri . По индукции можно показать (покажите), что это держится для всех i. Получается,
что на m − 1-ом шаге будет выполнено asm−1 btm−1 = gcd(a, b) — как раз то, что нужно!
Так как в плане остатков r здесь всё работает так же как для обычного алгоритма Евклида,
этот алгоритм также сходится очень быстро.
Теорема Эйлера
Нам осталось для полного понимания доказать теорему Эйлера.
Теорема Эйлера 1761 года. Для взаимнопростых чисел a и N , aϕ(N ) = 1 mod N..
Доказательство. Рассмотрим множество чисел a1 , a2 , . . ., aϕ(N ) , которые взаимнопросты с N .
Рассмотрим любое из них (обозначим его c). Во-первых для любого ai , cai = aj mod N , то есть
c домножением на ai переводит его в какой-то aj по модулю N (верно, поскольку произведение
взаимнопросто с N , и сколько из него не вычитай N , оно таким и останется). Во-вторых, если
cai = caj mod N , то ai = aj , т.е. это просто одно и то же число (верно, так как в уравнении
c(ai − aj ) = kN разность a не может сократить всего N , а c с ним взаимнопросто).
Поэтому при умножении всего множества на c, мы лишь переставляем в нём элементы (конеч-
но, по модулю N ), не склеивая их. Это всего лишь перестановка, биекция. Теперь справедливо
следующее: Y Y Y
ai = cai mod N = cϕ(N ) ai mod N.
Заметим, что произведение всех ai взаимнопросто с N , и его можно сократить. Мы тогда получаем
cϕ(N ) = 1 mod N , теорема доказана.
Итог
Хотелось бы вкратце обсудить, чем же нам помогла факторизация на простые сомножители p, q.
Почему без них задача очень трудна? Самое главное, что мы узнали тот самый период повторения,
равный (p − 1)(q − 1). Не зная p и q, мы бы не смогли сделать то упрощение в самом начале. Без
него, если p, q ∼ 1010000 , то есть 10000-значные числа, отгадывание x заняло бы миллионы лет. А
имея это знание, мы можем сделать вычисления за время, линейно зависящее от длины числа N ,
то есть довольно быстро.
Подготовка
Мы хотим найти для нечётного числа N его делитель 1 < d < N . Несколько замечаний:
1. Во-первых, если N — чётное, то тривиальный ответ d = 2, поэтому мы исследуем только
нечётные числа.
2. Далее, мы хотим, чтобы N не было степенью простого числа, то√есть N 6= pk . Это можно
очень быстро проверить: для всех k < log2 N посмотреть на корень k N и убедиться, что он не
простой. Корень вычисляется бинарным поиском аналогично за log2 N , каждый раз придётся
возводить в степень k за log k, таким образом сложность этой проверки O(log22 N log log N ).
Теперь мы имеем нечётное N , не являющееся просто степенью простого числа.
3. Кроме того, можно быстро проверить, является ли N само по себе простым (рандомизиро-
ванный алгоритм Ферма или что-то посложнее), с 2002 года это умеют делать за O(log3 N ).
Сведение проблемы факторизации к поиску порядка элемента
Оказывается полезным переформулировать проблему факторизации N в терминах другой задачи,
которую эффективно решает квантовый компьютер. Что это за новая задача? Предположим, что
нам каким-то образом удалось найти корень решения уравнения x2 = 1 mod N , отличный от
тривиальных 1 и N − 1. Перепишем уравение в виде (x − 1)(x + 1) = 0 mod N . Если x 6= 1 и
x 6= N − 1, то одна из скобок слева имеет с N нетривиальный общий делитель (не равный 1 и
N ). Таким образом, общий фактор есть gcd(x − 1, N ) или gcd(x + 1, N ), где gcd означает greatest
common divisor, наибольший общий делитель.
Как же можно найти корень уравнения x2 = 1 mod N ?
1. Случайным образом выберём целое число y между 0 и N − 1.
2. Проверим, что gcd(y, N ) > 1. Если это так, то N мы факторизовали N и счастливы. Но такой
редкой удачи скорее всего не произойдёт.
5. Если r — нечётное, то приходится вернуться к пункту 1 и начать заново. К счастью, это про-
исходит примерно в половине случаев. Это утверждение доказывается довольно громоздко,
но идея в том, что вне зависимости от того, какое число мы раскладываем, при случай-
ном выборе y оно будет в половине случаев иметь чётный порядок, а в другой половине —
нечётный.
Отлично! Получается, что x = r cos ϕ, y = r sin ϕ! И мы напишем z = r (cos ϕ + i sin ϕ). Эта
приятная запись называется тригонометрической формулой записи комплексного числа.
Задача: зная x и y, найди r и ϕ.
Задача: пусть z1 = r1 (cos ϕ1 + i sin ϕ1 ), z2 = r2 (cos ϕ2 + i sin ϕ2 ). Тогда z3 = r3 (cos ϕ3 + i sin ϕ3 ) =
z1 × z2 или z1 ± z2 или z1 /z2 . Найди выражения для r3 и ϕ3 .
Задача: снова попробуй понять, что же происходит на плоскости геометрически при этих
операциях?
Задача для тру пацанов: Зная z = r (cos ϕ + i sin ϕ), найти z n (если прошлые задачи решены,
то эта должна поддаться в полтычка).
Введём ещё пару полезных обозначений. Если z = x+iy, то z̄ = x−iy, называется комплексным
сопряжением.
Задача: чему это соответствует геометрически?
Задача: Что происходит с параметрами r и ϕ при сопряжении?
Очень важное обозначение — модуль числа |z|, по сути длина.
Задача: докажи, что |z|2 = z z̄. Теперь понятно, почему 1/(a + ib) = (a − ib)/(a2 + b2 )?
Наконец, мы подошли к самому соку. Я не буду приводить доказательство этого факта (доста-
точно лишь знать, что его сделал Эйлер), однако если кому-то хочется, я могу его привести, это
очень и очень красиво. Так вот, эта формула заслуживает отдельного места:
Чтоооо!?!? Что за экспонента от мнимого числа (угла)? есть один хороший способ это опреде-
лить. Когда мы говорим про экспоненту вообще, мы имеем в виду ex = 1+x+x2 /2!+. . .+xn /n!+. . ..
Это ряд, который сходится для всех x. А теперь просто уместо x подставим сюда iϕ, и нет про-
блем. Главное, что экспонента остаётся экспонентой, то есть сохраняет своё чудесное свойство
ex ey = ex+y .
Благодаря этой супер-формуле (которая, кстати, носит имя Эйлера и утверждает, например,
что eiπ = −1), мы переписываем алгебраическую форму в виде экспоненциальной формы, самой
прогрессивной и успешной: r (cos ϕ + i sin ϕ) = reiϕ . Таким образом, вся структура комплексного
числа у нас теперь как на ладони. Вот есть длина r, а есть как-бы направляющий множитель eiϕ .
Задача: пусть r = 1, что такое множество точек z = 1 × eiϕ ? Хорошенько почувствуйте, что
такое это за экспонента. Докажите, что |eiϕ | = 1.
Задача: снова посмотрим на операции деления и умножения z1 × z2 и z1 /z2 . Экспоненциальная
форма записи просто создана для того, чтобы делить и умножать. Поделите и умножьте, здорово
получается?
Задача: может, вы устали от абстрактных общих формул? Вот такая задача: z1 = 3 + 4i,
z2 = −2. Найдите r1 , ϕ1 , r2 , ϕ2 , запишите экспоненциальную форму обоих чисел, изобразите оба
числа на комплексной плоскости. Вычислите z2 /z1 , работая сначала в алгебраической, затем в
экспоненциальной форме.
После того, как нам стала известна экспоненциальная форма записи, мы готовы начать искать
корни из комплексных чисел. Тьфу, что может быть интересного в поиске корня? Ну-ка, чему
равен корень из i? сколько их? В общем, вся соль в том, что e2πi = 1, e4πi = 1, и вообще e2kπi = 1
для любого k. В вопросе извлечения корня это имеет очень глубокие последствия.
Будем считать, что мы извлеккаем корень из числа z = reiφ (то есть, из любого числа). Оче-
видно, что если взять w = r1/n eiφ/n , то wn = z (здесь r1/n подразумевается как самый обычный
школьный корень без понтов). То есть, w — корень. Это всё? Нет! Ведь w × e2iπ/n — тоже корень
(проверьте). Так же как и любое число w×e2iπk/n . Сколько различных k надо брать? Можно видеть
(увидьте!), что при k = 0, . . . , n − 1 мы будем получать различные корни, а дальше корни будут
накладываться на старые.
Поэтому всего уравнение wn = z имеет n корней вида
wk = r1/n eiϕ/n+2πik/n .
Задача: что из себя представляют корни на плоскости? Что это за фигура? Рассмотрите w3 = 1
для определённости, нарисуй корни на комплексной плоскости.
Рассмотрим z = 1 и уравнение wn = 1. Корни этого уравнения — т.н. корни из единицы, очень
известная конструкция. Ясно ли, что wk = e2πik/n ? Изобразите это семейство на плоскости.
Im
+1 B
0 A Re
-1 0 +1
-1 E
Прямое Фурье
Первое, что нужно сделать, это посчитать значения Pa (ω k ). Дополним многочлен Pa до степени
2n нулевыми коэффициентами. Тогда
2n−1
X
Pa (ω k ) = an−1 ω kn−k + cn−2 ω kn−2k + . . . + a0 = aα e2πikα/2n = Pˆa (k).
α=0
Вот это сюрприз! Да ведь это формула прямого преобразования Фурье! Не видите? В последнем
выражении aα — это сигнал, 2πk/2n = pk — это частота. Получается, в экспоненте стоит ipk α, как и
подобает. Получается, если мы вычисляем многочлен Pa в точке ω k , мы получаем преобразование
Фурье сигнала, если за√сигнал считать последовательность его коэффициентов! На самом деле не
хватает множителя 1/ N , о это всего лишь множитель, who cares?
Поточечное произведение
После того, как мы посчитали значения Pa (ω k ) и Pb (ω k ), для всех k найдём поточечное произве-
дение Pc (ω k ) = Pa (ω k ) × Pb (ω k ).
Обратное Фурье
Теперь мы знаем спектр многочлена Pc (ωk ), то есть спектр сигнала, если за сигнал принять его
коэффициенты. Отсюда, используя центральное тождество, мы в состоянии восстановить сами
коэффициенты!
2n−1 2n−1
1 X −2πikα/2n 1 X −αk
cα = e P̂c (k) = ω P̂c (k).
2n k=0 2n k=0
Это ведь всего лишь обратное преобразование Фурье от спектра. В итоге нам нужно: сначала
для многочленов Pa и Pb сделать преобразование Фурье от их коэффициентов, затем поточечно их
умножить и произвести обратное преобразование Фурье. Всё это хорошо изображено на следующей
схеме:
Таким образом, если мы вычислили преобразование Фурье для двух подмногочленов, преоб-
разование для полного лепится за n шагов. Таким образом, уравнение на сложность имеет вид
T (n) = 2T (n/2) + αn, решением которого является O(n log n).
0
Ax x A x y vx Ax xvx + Ax yvy v
Âv = Av = = = x0
Ay x Ay y vy Ay xvx + Ay yvy vy
По-простому формулу запоминают так: берём i-тую строчку матрицы, умножаем её почленно
на столбик вектора и пишем это в i-тый элемент результата.
Есть и более глубинное понимание этой формулы, которое крайне важно. Элемент матрицы
Ax x — это то, какой вклад даст vx в vx0 , Ax y — какой вклад даёт vx в vy0 , и так далее. То есть, оно
говорит, в какой степени те или иные координаты предыдущего вектора влияют на координаты
следующего.
Задание: что такой за оператор с матрицей
1 0
?
0 1
Задание: считая, что ABv = Cv, где v — некоторый произвольный вектор, запишите, как
производится вычисление C = AB.
Задание: используя это знание, отыщите матрицу инверсии относительно оси y = x.
Наконец, нам важно понятие собственного значения оператора. Что это такое? Пусть суще-
ствуют векторы, для которых Âv = λv. То есть оператор на некоторый вектор действует всего
лишь растяжением. Тогда число λ называется собственным значением оператора.
Как искать собственные значения операторов? Из уравнения Âv = λv следует (Â − λ)v = 0.
Очевидно, что если какой-то v решает это уравнение, то и любой cv решает — домножение на
константу ничего не поменяет. Это значит, что два уравнения выше (одно векторное есть два
скалярных) должны быть зависимы — одно есть другое, умноженное на число. Это эквивалентно
тому, что det(A − λ) = 0, где λ обозначает теперь единичную матрицу, умноженную на λ.
Задание: получите формулу для определителя матрицы B в двумерном случае, взяв за требо-
вание, что оба уравнения Bv = 0 (два скалярных) зависимы тогда и только тогда, когда det B = 0.
Задание: найдите определители всех матриц, которые упоминались в этом занятии.
Ещё одно важное определение, которое нужно сказать, это унитарный оператор. Унитарный
оператор — это такой, у которого модуль всех корней равен единице. Поворот, отражение, тожде-
ственное преобразование — всё это унитарные операторы.
Раньше мы рассматривали векторы, компонентами которых являются вещественные числа.
Для наших нужд придётся сказать, что компоненты векторов, а также элементы матриц операто-
ров — комплексные числа. По сути, всё, что мы определили раньше работает, но пару определений
нужно уточнить.
Во-первых, меняется определение скалярного произведения (проекции). Пусть снова мы ра-
ботаем в ортонормированном базисе, т.е. (e1 , e1 ) = (e2 , e2 ) = 0, e1 , e2 = 1. Если есть векторы
u = u1 e1 + u2 e2 , v = v1 e1 + v2 e2 , то скалярное произведение равняется (u, v) = u∗ v = u∗1 v1 + u∗2 v2 . То
есть компоненты левого вектора перед взятием скалярного произведения нужно сопрячь. Скаляр-
ное произведение уже более не имеет такого простого геометрического смысла, но если оно равно
нолю, то по определению мы говорим, что векторы ортогональны.
Задание: после расширения поля до комплексых чисел, поворот имеет собственные векторы.
Найдите их.
Задание: вычислите скалярное произведение векторов v = (1 + i, 3 − 2i) и u = (4, −i).
Задание***: докажите, что для унитарного оператора (Au, v) = (u, Av) (это можно брать за
определение).
Об измерениях
Итак, в предыдущей теме мы говорили про базисные вектора и говорили не зря. Рассмотрим кван-
товую систему, которая имеет два состояния, по традиции обозначающиеся |0i и |1i. Состоянием
может быть, например, энергетический уровень электрона в атоме (заставьте меня рассказать про
атом Водорода) или спин свободного электрона (и рассказать про спин). Фишка квантовой меха-
ники в том, что система может находиться как в этих состояниях, так и в их некоторой смеси,
которую называют суперпозицией.
Общий вид состояния системы записывается как ψ = α |0i + β |1i, где α и β — комплексные
числа. Накладывается дополнительное условие |α|2 + |β|2 = 1, смысл которого станет ясен чуть
позже. Числа α и β называются амплитудами состояний. Важно понять, что |0i и |1i — это просто
полные аналоги базисных векторов ex и ey . Эти состояния задают базис в двумерном пространстве
состояний системы так же, как и ex и ey задавали базис в двумерном пространстве положений.
Получается, что амплитуды — это аналоги vx и vy — это проекции состояния ψ на базисные
векторы |0i и |1i.
Важный вопрос квантовой механики — это процесс измерения. Пусть состояния |0i (вниз) и
|1i (вверх) — состояния электрона с определённым спином, вверх и вниз. Согласно Копенгаген-
ской интерпретации, происходит следующее: когда квантовая система взаимодействует с внешним
классичесим измерительным прибором (который каким-то образом измеряет спин), прибор всегда
получит только вверх или вниз (и никогда не что-то посередине). То есть, несмотря на то, что
система находится в смеси состояний со спином ±1, измерение даёт определённый результат. При
чём же здесь амплитуды α и β?
Оказывается, что прибор измерит спин “вниз” с вероятностью |α|2 и спин “вверх” с вероятостью
|β|2 (ясно, почему сумма должна быть равной 1?).
Важно: прибор испортит нашу систему. После того, как произолшо измерение, состояние кол-
лапсирует. Это означает, что если прибор намерил спин “вниз”, то сразу после измерения система
окажется в состоянии |0i и дальше будет медленно эволюционировать их него. То есть, система
коллапсирует в то состояние, которое было обнаружено классическим прибором.
Об эволюции
Квантовая механика, как и обычная механика,
описывает эволюцию системы. В данном случае
эволюционируют амплитуды (а вместе с ними
вероятности) тех или иных состояний. В каж-
дый конкретный момент времени система опи-
сывается значениями амплитуд α(t) и β(t). Так
как эти амплитуды — это коэффициенты в раз-
ложении по базисным состояниям, то эволюци-
онируют именно они. Пусть в начальный мо-
мент система находилась в состоянии α(0), β(0).
Какова связь между старыми и новыми коэф-
фициентами? Вы уже догадались, нужно до-
множить на матрицу!
|ψ(t)i = Û (t) |ψ(0)i .
Оператор Û называется оператором эволюции, а матрица U — матрица эволюции, которая свя-
зывает коэффициенты разложения старые и новые. Конкретный вид оператора эволюции зависит
от системы и базиса состояний.
Здесь было сделано очень важное утвержде-
ние! Эволюция квантовой системы линейна!
То есть, новые коэффициенты всегда выража-
ются через старые линейно, то есть они сто-
ят там всегда в первой степени, и вся эволю-
ция выражается просто умножением на матри-
цу. Отсюда следует, что оператор Û — унитар-
ный (почему?). Правильно, иначе бы он растя-
гивал вектора, нарушая свойство |α|2 +|β|2 = 1.
Квантовая механика работает таким обра-
зом: сначала можно подготовить систему в
состоянии с определённым спином, например,
вниз: |0i. Потом, зная параметры системы и
время эволюции t, можно в принципе вычис-
лить оператор эволюции Û и найти, в каком со-
стоянии (с камими амплитудами) будет система через время t. А амплитуды эти проявляют себя
как вероятности получения того или иного значения спина при измерении. Задача: для матриц
0 1 0 −i 1 0
σx = , σy = , σz = найдите собственные векторы и соответствующие им
1 0 i 0 0 −1
собственные значения.
Матрицы наверху называются матрицами Паули — матрицы спина (внутреннего магнитного
момента). Вектор, который является собственным, например, для σx , при измерении спина вдоль
оси x будет всегда давать одно значение.
О кубитах
До сих пор мы не касались темы самого,
собственно, квантового компьютера. Основным
элементом классического компьютера являют-
ся регистры, которые в себе содержат какое-
то число. Для простоты будем считать, что ре-
гистр хранит в себе 0 или 1 и называется би-
том. Квантовым аналогом бита является кубит
— когда обычный бит может находиться толь-
ко в состояниях |0i и |1i, квантовый же бит
(кубит) может находиться в любой произволь-
ной суперпозиции (описанной выше) и может
эволюционировать со временем под действием
унитарного оператора.
На классическом компьютере биты формируют различные арифметические схемы, которые
состоят из базовых логических элементов AND, OR, NOT, XOR и так далее. Типичная такая
схема изображена на рисунке выше.
Логические элементы преобразуют сигналы, приходящие им на вход, и на их основе формируют
определённый выход. Для квантового компьютера существует нечто подобное. Квантовое состоя-
ние (или несколько состояний) подаются на вход квантового вентиля (quantum gate). Квантовый
вентиль — это некое унитарное преобразование, которое реализуется на практике множеством
способов. Квантовый вентиль преобразует входные состояния определённым образом.
Рассмотрим основные виды квантовых вентилей, которые нам пригодятся для алгоритма Шора.
Вентиль Адамара
Принимая на вход один кубит, он действует на него унитарным оператором с матрицей
1 1 1
Ĥ = √ .
2 1 −1
Задание: как вентиль Адамара действует на состояния |0i и |1i?
Задание: найдите собственные векторы и собственные значения вентиля Адамара. Правда,
оператор унитарный?
Задание: найдите действие вентиля фазового сдвига на состояния |0i и |1i. Унитарный опера-
тор?
Задание: найдите собственные векторы и собственные значения вентиля.
Контролируемый вентиль
Сначала поговорим про операторы, действующие на нескольких квантовых состояниях. Пусть у
нас есть не 1, а m состояний. Когда было одно состояние, мы говорили, куда оно переводит ноль
и нуда оно переводит один. Поэтому была матрица 2 × 2. А теперь у нас 2m комбинаций, которые
могут переходить в другие 2m комбинаций, и потому матрица будет размера 2m × 2m .
Этот вентиль, посмотрев на регистр (несколько квантовых состояний) что-то делает с одим
состоянием на входе. Не очень явная формулировка. Нам нужен будет только такой контролируе-
мый вентиль: пусть в контролирующем регистре есть m квантовых состояний. Пусть есть оператор,
действующий на m состояниях. Пусть к тому же в этих регистрах записано не что-то там, а соб-
ственный вектор этого оператора (один из). Тогда этот оператор, увидев это собственное значение
(так как оно по модулю 1, то λ = eiϕ ), действует на единственный контролируемый кубит (m
контролирующих и 1 контролируемый) как вентиль фазового поворота на угол ϕ. Также можно
построить аналогичные операторы, которые будут поворачивать состояние на угол 2n ϕ — то есть
на любую степень двойки.
Оценка фазы
Следующая важная часть алгоритма Шора — phase estimation. Поговорим о ней подробнее. Пусть
имеется унитарный оператор Û и собственный вектор |ui, собственное значение e2πiϕ , фаза ϕ нам
неизвестна. Цель алгоритма — определить фазу ϕ с некоторой точностью, которая экспоненци-
ально падает с числом задействованных в алгоритме кубитов. Для начала представим, что мы
имеем оракула, который умеет подготавливать собственное состояние |ui (регистр на множестве
j
кубитов), а также умеет быстро действовать на это состояние оператором Û 2 для любого неот-
рицательного целого j (то есть может быстро подействовать определёнными степенями оператора
Û ). Алгоритм оценки фазы нужен для многих квантовых алгоритмах, поэтому пока удобнее о нём
думать без привязки к алгоритму Шора. В случае алгоритма Шора оракул превратится во что-то
осязаемое.
Алгоритм использует два регистра. Первый регистр задаётся t кубитами, которые все изачально
находятся в состоянии |0i. Число t опредетяет точность, с которой будет сделана оценка фазы ϕ.
Второй регистр содержит столько кубитов, сколько нужно, чтобы задать состояние |ui.
Алгоритм состоит из двух частей. Первая часть выражена схемой, изображённой на рисунке.
Если учесть, что |ui — собственное состояние оператора Û (а как действует степень оператора
на собственный вектор?), то эта схема создаёт состояние
2t −1
1 2πi2t−1 ϕ
2πi20 ϕ
1 X 2πiϕk
|0i + e |1i . . . |0i + e |1i = t/2 e |ki .
2t/2 2 k=0
Здесь под |ki подразумевается определёное состояние t кубитов (какое?). Затем нужно инвертиро-
вать кубиты, то есть поменять 1 и n, 2 и n − 1, и так далее.
Задание: почему описанное выше преобразование унитарно?
Задание: как выглядит матрица преобразования Адамара одного кубита в виде оператора,
действующего на систему из n кубитов?
Задание: запишите матрицу оператора инверсии n кубитов.
Вторая стадия алгоритма — применить обратное квантовое преобразование Фурье. По сути
это прямое преобразование Фурье, но с вращениями на отрицательные фазы. Его мы уже умеем
делать.
Чтобы наша интуиция работала выше, будем считать, что фаза ϕ выражается в точности t
битами, ϕ = 0.ϕ1 . . . ϕt (почему так можно считать?). Тогда приведённая формула принимает вид
(периодичность экспонент):
1 0
|0i + e2πi0.ϕt |1i . . . |0i + e2πi2 0.ϕ1 ϕ2 ...ϕt |1i .
2t/2
Теперь настало время делать обратное преобразование Фурье. Но ведь формула выше — это
результат прямого преобразования Фурье над вектором |ϕi = |ϕ1 ϕ2 . . . ϕt i. Стало быть, обратное
преобразование Фурье даст нам именно |ϕi. Поэтому теперь мы можем изменять регистр |ti и
получать ϕ.
Ложка дёгтя
Осталось сделать два важных замечания. Первое: как быстро искать большую степень оператора
Û . На этот вопрос вы можете ответить сами — это динамическое возведение в степень.
Кроме того, подготовить состояние |us i невозможно! Его определение включает в себя неиз-
вестный нам r. Как быть?
r−1
Задание: докажите, что √1r
P
|us i = |1i.
s=0
Таким образом, вместо |us i мы будем скармливать в управляющий регистр просто состояние
|1i (как это в кубитах?). Это состояние — это суперпозиция собственных состояний |us i. Сделав
измерение один раз, мы найдём какое-то отношение s/r для некоторого случайного s. Беда в том,
что это отношение мы можем измерить лишь с некой точностью (у нас конечное число регистров).
При этом мы знаем, что мы измеряем некую рациональную дробь! Поэтому (есть просто такая
теорема), что при достаточном числе кубитов (хватит log22 N мы сможем безошибочно определить,
какая это именно дробь, и, соответственно, каков порядок r).