Spis treści: (ukryj)
Mamy daną liczbę N, o której wiemy, że jest iloczynem dwóch liczb pierwszych N = pq.
Szukamy tych liczb pierwszych.
Jeżeli teraz znajdziemy r i będzie ono parzyste, to możemy rozbić
(Nota: jeżeli r nieparzyste - startujemy od nowa.)
Ponieważ
Chcielibyśmy teraz mieć pewność, że jedno z wyrażeń w nawiasach jest równe p lub q. Pojawia się więc pytanie - czy liczby nie rozłożą się tak, że to n=pq będzie dzielić jedno z wyrażeń w nawiasach - i nic nie zyskamy?
W takiej sytuacji mamy pewność (o ile akurat trafiliśmy), że jedna z szukanych liczb pierwszych (tzn. p lub q) jest NWD liczby n i jednego z nawiasów. (Jeżeli jednak wyjdzie nam, że wspomniane ok. 50% przyniosło nam pecha, będzie trzeba wystartować algorytm od nowa, z innym a.)
Wspomnieć trzeba przy okazji jaką wartość ma a. Otóż a bierzemy losowo ze zbioru liczb względnie pierwszych z rozgryzaną liczbą n:
Takich a zazwyczaj będzie dużo więcej niż jedno, więc jest z czego wybierać. Będziemy to (niestety) musieli często wykorzystywać, gdyż w algorytmie Shora jest wiele miejsc, gdzie szczęście może nam nie dopisać.
(Na marginesie: NWD jest bardzo łatwo znaleźć - stosuje się do tego algorytm Euklidesa).
Zagadnienie szukania rzędu z kolei przekształcimy do jeszcze innego problemu - szukania okresu funkcji
Czemu możemy tak zrobić? Otóż z definicji rzędu możemy wysnuć taką równość:
Tak więc jeśli znajdziemy okres r funkcji f, to będziemy wiedzieć, że jest to jednocześnie szukany rząd:
Pokazaliśmy wcześniej, że jeśli dla wybranej losowo liczby a znajdziemy okres r funkcji f=ax (mod n), będziemy mogli (jeśli szczęście dopisze) rozwiązać nasz problem faktoryzacji. Jak więc znaleźć r? Tutaj wreszcie wykorzystamy właściwy komputer kwantowy.
Do naszych obliczeń będziemy stosować rejestr kwantowy. Rejestr ten będzie zbudowany z 2m kubitów. Liczbę m wyznaczamy następująco:
Na początku ustawiamy rejestr w stan bazowy, w którym wszystkie kubity są wyzerowane:
Teraz korzystamy z q-kubitowej bramki Hadamarda, by w rejestrze kwantowym wygenerować superpozycję M stanów bazowych, odpowiadających kolejnym liczbom całkowitym od 0 do M−1
W tym kroku korzystamy z istotnej cechy komputera kwantowego, zgodnie z którą może on wykonywać obliczenia równolegle na wszystkich stanach bazowych. W naszym przypadku działaniem wykonywanym równolegle będzie obliczanie wartości funkcji f.
Aby wykonać wspomniane obliczenie, konieczne jest zbudowanie odpowiedniego obwodu kwantowego realizującego funkcję f. Okazuje się, że zadanie to wcale nie jest proste. Ponieważ jednak jest to temat "na osobną bajkę", w niniejszym rozważaniu pominiemy go; powiemy tylko, że da się to zrobić, a czytelnika odeślemy do opisu podanego przez Shora w jego pracy.
Obwód kwantowy realizujący funkcję f na potrzeby algorytmu Shora powinien być zbudowany tak, by wartość funkcji dla argumentu zakodowanego w pierwszej połowie rejestru kwantowego (kubity od 1 do m) znalazła się w drugiej połowie rejestru kwantowego (kubity od m+1 do 2m)
Jeśli więc wykonamy tę operację na naszym rejestrze, dostaniemy
Po dokładniejszy, bardziej obrazowy opis kwantowej transformaty Fouriera (ang. QFT - quantum Fourier transform) odsyłam do osobnego artykułu. Mówiąc w skrócie, kw. t. F. jest operacją niemal identyczną do zwyczajnej dyskretnej transformaty Fouriera, tylko działającą na liczbach zakodowanych "binarnie" w rejestrze kwantowym. Tak więc
gdzie i jest jednostką urojoną, . Dla ułatwienia interpretacji powyższego wzoru, możemy go przepisać do postaci
Rys.1. Liczba zespolona eiθ, gdzie , jako wektor na płaszczyźnie zespolonej.
Zwróćmy uwagę, że ω jest liczbą zespoloną zapisaną w postaci wykładniczej. Liczbę zespoloną zapisaną tak właśnie (jako eiθ) można bardzo łatwo zinterpretować geometrycznie, jako wektor na płaszczyźnie zespolonej, leżący pod kątem
do osi odciętych (na płaszczyźnie zespolonej nazywa się ją osią rzeczywistą). Dodatkowo, przy takim dokładnie zapisie jak powyżej, długość takiego wektora będzie równa 1 (zob. rys. 1). Zauważmy wreszcie, że skoro 2π jest kątem pełnym, to
jest wycinkiem powstałym z podziału koła na M równych części. Te wszystkie spostrzeżenia pomogą nam później zrozumieć cel zastosowania QFT w tym punkcie algorytmu.
Stosując kwantową transformatę Fouriera na pierwszej połowie naszego rejestru, przeprowadzamy go w stan
W komputerze kwantowym jedynym sposobem, w jaki możemy odczytać jakąkolwiek informację z rejestru kwantowego, jest jego obserwacja. A jedyną informacją, jaką odczytujemy podczas takiej obserwacji, jest amplituda Po takiej obserwacji zawartość całego rejestru kwantowego niszczy się i staje bezużyteczna. Co więcej, obserwacja daje nam w rzeczywistości przybliżoną wartość , czyli liczba stojąca przed jednym, wybranym przez nas wcześniej, stanem bazowym |x› rejestru.
, tym lepszą, im więcej razy wykonamy obserwację (jest to bowiem tak na prawdę obserwacja prawdopodobieństwa). Dlatego większość algorytmów kwantowych, w tym także algorytm Shora, opiera się na takim ustawieniu amplitud, by już minimalna ilość obserwacji dała nam bardzo wartościową informację, pozwalającą kontynuować algorytm w jego części klasycznej.
The numbers a < N coprime to N (having no common factor with N) form a finite group under multiplication mod N. [Why? We need to establish that each element a has an inverse. But for given a < N coprime to N, each ab (mod N) is distinct, as b ranges over all b < N coprime to N ((If N divides ab - ab' , it must divide b - b' ). Therefore, for some b, we must have ab == 1 (mod N); hence the inverse of a exists.] Each element a of this finite group has a finite order r, the smallest positive integer such that