Wykład 12 Algorytm Shora Algorytm Shora powstał z dwóch głównych źródeł. Jednym ze źródeł jest teoria liczb, którą nie będziemy tu rozważać dokładnie i która wykazuje, że faktoryzacja może być sprowadzona do znalezienia okresu niektórych funkcji. Znalezienie okresu jest oczywiście związane z przekształceniem Fouriera, z którym spotykamy każdy dzień i to jest drugim źródłem algorytmu Shora. Komputer kwantowy może bardzo efektywnie wyliczać paralelnie potrzebną liczbowo-teoretyczną funkcję dla wielu danych wejściowych i może też wykonywać niektóre aspekty transformacji Fouriera tak efektywnie, że był wprowadzony termin „kwantowe przekształcenie Fouriera” (QFT). Dla czego jest interesującym znalezienie głównych mnożników liczb wielkich? Motywacja naukowa jest taka, że to jest trudny problem. Okazuje się, że to jest dowolnie rzadki przypadek, kiedy taką samą motywację mają naukowcy, bankierzy i wojskowe. Przyczyną tego jest kryptografia, przekazywanie tajne danych (na przykład, finansowych albo wojskowych) za pomocą tak zwanych schematów otwartego klucza kryptograficznego. W tych schematach wielka liczba (otwarty klucz) wykorzystuje się dla generacji zakodowanej wiadomości, która zostaje przekazywana do odbiorcy. Wiadomość można dekodować tylko wykorzystując główne mnożniki otwartego (public) klucza. Te główne mnożniki (prywatny klucz) zna tylko odbiorca (bank, kierownik jednostki itd.). Przykładem dość niskiego poziomu jest liczba 29083 127 229 . Za pomocą tylko ołówka i papieru, prawdopodobnie, główne mnożniki można znaleźć za jakiś czas, natomiast operacja odwrotna (mnożenie) zajmie nie więcej niż minutę. Teoria liczb Załóżmy, że N 3 jest nieparzystą dużą liczbą, którą chcemy sfaktoryzować, a a N jest inną liczbą. Załóżmy, że największy wspólny dzielnik (greatest common divisor gcd) gcd N , a 1 , tj. N i a są wzajemne proste liczby. (Jeżeli one nie są wzajemnie proste, f gcd N , a jest już nietrywialnym głównym mnożnikiem N i my startujemy z N / f zamiast N .) Dla znalezienia gcd skorzystamy z algorytmu Euclidesa, który w języku nowoczesnym nazywa się algorytmem efektywnym. Algorytm działa następująco. Załóżmy x i y dwie całkowite liczby, x y , a z gcd( x, y ) . Wtedy jak x tak i y ,a również x y, x 2 y, są mnożnikami z i ostatek 1 r x ky y otrzymuje się przy podziale x przez y . Jeżeli r jest równe zero, to z y i problem jest rozwiązany. Jeżeli r 0 , to problem transformuje się w podobny problem ale z mniejszą liczbą z gcd x, y gcd y, r . (12.1) Powyższe argumenty można powtórzyć z parą liczb ( y , r ) zamiast ( x, y ) itd. A zatem z wyraża się jako gcd par zmniejszających się liczb. Ostatni niezerowy ostatek otrzymany w taki sposób jest poszukiwaną liczbą z . Przechodząc do naszego zagadnienia faktoryzacji liczby N rozważmy drugi blok z teorii liczb, który nosi nazwę modular exponention. Pamiętając, że N i a są wzajemne proste liczby, rozważmy potęgi a r liczby a , modulo N (tj, znajdziemy ostatek od dzielenia a r przez N ). Najmniejsza dodatnie liczba całkowita r taka, że ar mod N 1 (12.2) nosi nazwę się rzędu (order) a mod N . To oznacza, że dla niektórego k ar k N 1 (12.3) a zatem a r 1 k N a a (12.4) i a r 1 mod N a mod N , (12.5) a z tego wynika, że r jest okresową modular exponential funkcją FN ( x) a x mod N . (12.6) A propos, to oznacza, że r N ponieważ FN (x) (która jest ostatkiem przy podziale przez N ) nie może być zakładamy większe niż N innych wielkości przed powtórzeniem. Mogą istnieć trzy przypadki: 1. r jest nieparzystą, 2. r jest parzystą i a r / 2 mod N 1 , 3. r jest parzystą i a r / 2 mod N 1 . Przypadki 1) i 2) są nierelevant (nie możliwe) dla faktoryzacji N , ale w przypadku 3), jak zobaczymy niżej, chociaż jedna z dwóch liczb gcd N , a r / 2 1 jest nietrywialnym mnożnikiem N . 2 Strategia faktoryzacji Udowodnimy teraz, że powyższy przypadek 3) daje nietrywialny mnożnik N . Dla uproszczenia oznaczeń oznaczmy a r / 2 x . Ze wzoru x 2 mod N 1 wynika, że x 2 1 x 1x 1 dzieli się przez N , a zatem mają wspólny mnożnik z x 1 albo z x 1 . A zatem samo N nie może być wspólnym mnożnikiem, ponieważ x mod N 1 , a zatem x 1 nie jest krotnym N ; x 1 nie może też być krotnym N , ponieważ jeżeli to jest tak, to a r / 2 mod N 1 i rząd (order) musi być r / 2 , a nie r . (Przypomnijmy, że rząd jest określony jako najmniejsza liczba taka, że a r mod N 1 ). Wspólny mnożnik musi być wtedy jedną z liczb gcd N , a r / 2 1 i gcd może być efektywnie wyliczony za pomocą algorytmu Euclidesa. Dalej udowodnimy, że przypadek powyższy 3) ma wysoką szansę zajść, jeżeli losowo wybieramy dowolne liczby a . Następne fakty dają nam nadzieję: Jeżeli N jest dokładnie główną potęgą N p s ( s 2 ), to można to efektywnie zarejestrować, ponieważ wtedy warunek s log N / log p (z całkowitym p ) musi być słuszny, co może być sprawdzone dla wszystkich dowolnych wartości s . (Zauważmy że s musi być chociażby log N / log 2 ). Jeżeli N jest nieparzyście złożoną liczbą N p11 p m m ( m 2 ), a a jest losowo wybraną całkowitą liczbą 1 a N 1 wzajemnie prostą (comprime) do N i a r 1 mod N (tj. r jest rządem a mod N ), to prawdopodobieństwo probr parzysta a a r / 2 mod N 1 1 1 3 . m 4 2 (12.7) A to oznacza, że każdy raz wyliczając rząd a mod N , mamy szansę lepsze niż 75% znaleźć nietrywialny główny mnożnik N . Obliczenia rządu m razy zmniejsza szansę niepowodzenia do 4 m . Szansę znalezienia głównego mnożnika (jeżeli on istnieje!) może być doprowadzony do wielkości dowolnie zbliżony do 1, jednak ważne jest pamiętać, że algorytm Shora jest algorytmem probabilistycznym. Udowodnienie tego wyniku z teorii liczb nie jest trudnym, ale ono zawiera kilku dowodów z klasycznych kultur, takich jak twierdzenie chińskiego ostatku, które ma 750 lat. Teraz jesteśmy w stanie przedstawić algorytm, który (z dużym prawdopodobieństwem) daje nietrywialny mnożnik dla dowolnego skomplikowanego N . Wszystkie kroki mogą być wykonane efektywnie na komputerze kwantowym, za wyjątkiem zadania wyliczenia rzędu, który liczy komputer kwantowy. 3 1. Jeżeli N jest parzystym wybieramy mnożnik 2. 2. Określamy, czy N a b dla całego a 1 i b 2 i jeżeli tak, to wybieramy mnożnik a . 3. Losowo wybieramy x w obszarze od 1 do N 1 . Jeżeli gcd x, N 1, to wybieramy mnożnik gcd x, N . 4. Stosujemy podprogram znalezienia rządu dla znalezienia rządu x modulo N . 5. Jeżeli r jest parzyste, a x r / 2 mod N 1, to wyliczamy gcd x r / 2 1, N i sprawdzamy, czy jeden z nich jest nietrywialnym faktorem, i jeżeli tak, to wybieramy ten mnożnik. W przeciwnym przypadku, algorytm zawiódł i musimy wracać do kroku 3). Rdzeń algorytmu Shora Centralną częścią algorytmu Shora jest wyliczenie rzędu a mod N , tj. okres modular exponential function (12.6). Strategią wykonania tego jest wyliczenie paralelnie funkcję FN (x) dla wielu wartości x i skorzystanie z techniki Fouriera dla określenia okresu w sekwencji wartości funkcji. Żeby zrobić to dla danego N są potrzebne dwa rejestry kwantowe: źródłowy rejestr z K kubitami, taki, że N 2 Q : 2 K 2 N 2 i celowy rejestr z N albo więcej stanów bazowych, jednak nie mniej niż log 2 N kubitów. Krok 1 algorytmu jest inicjalizacja dwóch rejestrów ~ ~ 1 0 0 . (12.8) Drugim krokiem jest „kwantowe przekształcenie Fouriera” rejestru źródłowego. Kwantowe przekształcenie Fouriera to nic nowego. To zwykłe dyskretne przekształcenie Fouriera szeregu danych o długości Q . Odpowiedni operator unitarny działający na początkowe dane rejestru przestrzeni Hilberta ma postać U FQ : q qq / exp 2 i Q Q q / 0 1 Q 1 / q . (12.9) Liczba q między 0 i Q 1 ma binarne rozwinięcie q j 0 q j 2 j , a q jest skrócony zapis K 1 q K 1 q1q0 . Celowy rejestr nie modyfikuje się, a zatem po drugim kroku mamy 4 Q 1 2 U F 1 1 Q 1 / 2 q 0 ; Q (12.10) q 0 wszystkie mnożniki fazowe Fouriera są równe jedynce, ponieważ wszystkie początkowe kubity były równy zeru. Zauważmy, że ten szczególny wyjściowy wynik może być również otrzymany po transformacji Hadamarda początkowego rejestru. Krokiem 3 jest zastosowanie bramki U a , która realizuje modular exponention q f (q) a q mod N (nie będziemy rozważać jak jest zbudowana ta bramka). Wynikiem jest Q 1 3 U a 2 Q 1 / 2 q a q mod N . (12.11) q 0 Tutaj Q N 2 funkcjonalne wartości funkcji FN (q) obliczają się paralelnie jednym krokiem, a ponieważ r N okres r musi wykazywać w niektórych miejscach tej sekwencji funkcjonalne wartości (function values). Krok 4. Stosujemy znów przekształcenie Fouriera ku początkowemu rejestru. Ta daje 4 U F 1 3 Q Q 1 Q 1 Q 1 e 2 qq / Q / q a q mod N . (12.12) q 0 q / 0 Krok 5. Mierzymy początkowe kubity w bazie obliczeniowej. Prawdopodobieństwo znalezienia początkowego rejestru w stanie q zmienia dane (pattern) (wskutek interferencji kwantowej) od regularności, porządek r którego można wyprowadzić. Dla tego, żeby widzieć to, załóżmy (chociaż to założenie jest niemożliwym, ponieważ Q jest potęgą dwójki, ale jak zobaczymy niżej, to nie powoduje wrażliwych głównych efektów) na moment, że Q dzieli się przez r , tj. Q nr . (12.13) Wprowadźmy skrócone oznaczenie dla stanu 4 4 qq q f (q / ) , / q (12.14) q/ gdzie sumowanie jest wykonane od zera do Q 1 . Prawdopodobieństwo znalezienia początkowego rejestru w określonym stanie bazowym q0 jest równe wartości oczekiwanej 5 Pq0 1 , gdzie Pq0 q0 q0 jest operatorem rzutowym na q0 , a 1 odnosi się do celowego kubitu 4 Pq 1 4 pp qq p q0 q0 q f ( p / ) f (q / ) / 0 p p/ / q/ q q p / q q / f ( p / ) f (q / ) . p/ 0 q/ (12.15) 0 Modular exponential funkcja f ( p) a p mod N ma okres r i r wartości funkcji wewnątrz okresu są wszystkie różne, wskutek natury funkcji. A zatem, iloczyn skalarny f ( p / ) f (q / ) stanów celowego rejestru jest okresowy względem obu zmiennych p / i q / , i możemy sortować człony w (12.15) zgodnie z niezerowymi wartościami najpierw przypadek q / 0, r ,2r ,, (n 1)r . p/ 0. Iloczyn Dla dowolnego f (0) f (q / ) f (0) f (0) 1 skalarny q/ z f ( p / ) f (q / ) . Rozważmy tych f ( p / ) f (0) 1 liczb dla dla p / 0, r ,2r ,, (n 1)r . A więc człony w (12.15) zawierające niezerowe iloczyny skalarne f (0) f (0) generują następujący wkład n 1 n 1 0 0 q0 ,r q ,r 0 2 n 1 0 q0 , r . (12.16) W podobny sposób możemy pozbierać wkłady, związane z f (1) f (1) , f (2) f (2) , , f (r 1) f (r 1) i otrzymać szukane prawdopodobieństwo znalezienia początkowego (source) rejestru w stanie bazowym q0 2 r 1 n 1 4 Pq 1 4 q ,r j 0 j 0 0 0 . (12.17) Suma wewnętrzna zawsze zawiera n członów, w niezależności od j . To jest wynikiem założenia (12.13). Bez tego założenia, tj. dla (n 1)r Q nr wewnętrzna suma będzie miała n 1 członów tylko dla niektórych j . Ale to nie daje dużego efektu, jeżeli będziemy zakładali, że zwykle rozważamy duże liczby. Zapisując abrewiatury qq/ w postaci jawnej znajdujemy 6 2 n 1 0 q0 , r j 1 2 Q 2 q exp 2i 0 r j Q 0 n 1 q j n 1 q r 1 2 exp 2i 0 exp 2i 0 Q 0 Q Q 2 . (12.18) Mnożnik fazowy z przodu sumy jest nieistotny. Suma (geometryczna) daje n , jeżeli q0 r / Q jest liczbą całą i zero w pozostałych przypadkach, w niezależności od j . A zatem prawdopodobieństwo (12.17) wykazuje strukturę pików równej wysokości, z której możemy znaleźć r . Bez upraszczającego założenia (12.3) struktura pików nie jest dokładnie regularną, ale prawdopodobieństwo znalezienia źródłowego (source) registru w stanie q0 może być wciąż wyrażone przez kilku sum geometrycznych 4 Pq 1 4 0 1 Q2 Q 1 j int r 1 r j 0 0 2 q r exp 2i 0 Q , (12.19) gdzie „int” oznacza całą część rzeczywistej liczby. Funkcja (12.19) jest pokazana na rys.12.1 dla Q 256 i r 10 . Ze struktury regularnej pików, podobnej do struktury przedstawionej na tym rysunku rząd r można wyprowadzić z wysokim prawdopodobieństwem (ale nie z pewnością), jeżeli wziąć pod uwagę dość dużą liczbę pików Rys.12.1. Prawdopodobieństwo pomiaru q dla Q 256 i r 10 7 Pozostało zrozumieć realizację modular exponentiation i dyskretną transformację Fouriera. Pominiemy wszystkie szczegóły modular exponentiation za wyjątkiem jednej uwagi, związanej z efektywnym wyliczeniem (wyższych) potęg x a dowolnej całkowitej a . Za pomocą M można wygenerować M 1 liczb x, x 2 , x 4 ,, x 2 . Korzystając z binarnego M rozwinięcia a i 0 ai 2i ( ai 0,1 ), szukaną potęgę możemy zapisać w postaci M M xa x2 i 0 i ai . (12.20) A zatem, ponieważ ten iloczyn zawiera chociażby M 1 mnożników, duża potęga x a może być wyliczona wykorzystując tylko rzędu log 2 a mnożników. Potrzebnym dodatkowym ingredientem jest tylko algorytm mnożenia dwóch całych za pomocą bramek kwantowych, który jednak istnieje. Transformacja kwantowa Fouriera Rozważmy najpierw „klasyczną” dyskretną transformację Fouriera z krótką dygresją o szybkim przekształceniu Fouriera (FFT), a potem przejdźmy do kwantowej transformacji Fouriera (QFT) i zobaczymy, że ona jest nawet szybsza, niż szybka transformacja Fouriera. Zwykła dyskretna transformacja Fouriera mapuje urojony wejściowy wektor ze składowymi x0 , x1 ,, x N 1 na wektor wyjściowy (współczynniki Fouriera) y 0 , y1 ,, y N 1 zgodnie z yk N 1 N 1 2 2i kj x j , N (12.21) 2i kj y j . N (12.22) exp j 0 i odwrotnie xk N 1 N 1 2 exp j 0 Zauważmy, że obie transformację mogą być zinterpretowany jako operacji „matrix times vector”. To, że dwie macierzy przekształceń są odwrotne jedna do drugiej wynika, z równości N 1 2i j l k N jl , N exp k 0 (12.23) która jest skutkiem sumowania geometrycznego. Zwykle wyliczenie przekształcenia Fouriera zawiera około N 2 urojonych mnożeń i prawie tyle dodawań. A zatem, podwojenie rozmiaru zbioru danych powoduje zwiększenie operacji o cztery razy. 8 FFT (które ma początek od pracy Gauβ z 1805 roku) opiera się na obserwacji, że rozdzielając w (12.21) parzyste i nieparzyste j otrzymujemy yk N 1 2 N 1 N2 1 2 i 2 i 2 2i exp kl x 2l exp k exp kl x 2l 1 , N /2 N l 0 N /2 l 0 (12.24) gdzie zakładamy, że N jest parzyste. Zauważmy, że dwie sumy są znów przekształceniami Fouriera N / 2 danych każda, co prowadzi do 2N / 2 N 2 / 2 operacji obliczeniowych. A 2 zatem prosta reorganizacja sumy Fouriera zmniejsza ilość operacji o połowę i nie ma przeszkód pozostawać na tym etapie, jeżeli N / 2 jest parzystą liczbą. Kontynuacja tego procesu do N 2 n daje FFT algorytm, który zmniejsza ilość operacji z O( N 2 ) do O ( N log N ) , co pozwala w wielu aplikacjach, na przykład procesie obrazowania, tomografii komputerowej itd., przejść od „pryncypialnej możliwości” do „praktycznej i wygodnej dla wykorzystywania na co dzień aplikacji”. Kwantowa transformacja Fouriera jest operatorem określonym za pomocą następującego mapowania stanów bazowych na przestrzeni N -wymiarowej Hilberta j N 2i jk k . N 1 N 1 2 exp k 0 (12.25) Wtedy dowolny stan kwantowy z amplitudami x j transformuje się jako N 1 N 1 j 0 k 0 x j j yk k (12.26) gdzie y k określają formuły (12.21) „klasycznego” przekształcenia Fouriera. Ta transformacja jest unitarną, tj. ona zachowuje normę stanu kwantowego N 1 y k 0 N 2 k 1 2 2i N x j exp jk N k 0 j 0 1 N 1 N 1 N 1 N 1 N 1 x j x e k 0 j 0 l 0 l 2i j l k N N 1 xl l 0 gdzie na ostatnim kroku skorzystaliśmy z równości (12.23). 9 2 , Załóżmy teraz, że N 2 n tak, że bazowe stany 0 2 n 1 tworzą obliczeniową bazę dla n - kubitowego komputera kwantowego. Będziemy oznaczać te stany bazowe albo za pomocą wskaźnika j , albo za pomocą sekwencji j1 j 2 j n z binarnej reprezentacji j n j j1 2 n 1 j n 2 0 j 2 n . (12.27) 1 Nam potrzebna będzie też binarna reprezentacja ułamkowych liczb (pomiędzy 0 i 1), którą zapiszemy jako binarny ułamek 0, jl jl 1 j m jl 2 1 jl 1 2 2 j m 2 m l 1 . (12.28) Rozważmy inne podejście do przekształcenia Fouriera j 2 2i n 2 n 1 2 exp 2 k 0 n jk k , (12.29) i podstawiając binarne przedstawienie k znajdujemy j 2 2 n 2 1 1 n 2 1 2i n n j k l 2 nl k1 k n = exp k1 0 k n 0 2 l 1 1 n exp 2ijk l 2 l k l 2 k n 0 l 1 k1 0 2 n 2 0 n l 1 l n 2 1 l exp 2ijk l 2 k l l 1 kl 0 n . exp 2ij 2 l 1 l Na pierwszym kroku k1 k n było przedstawione jako jawny iloczyn tensorowy następnie i j sumy ai b j zostały przegrupowane zgodnie z n l 1 formalną kl , a strukturą a b . Na końcu rozważanie w eksponencie daje binarny ułamek i i j j n j 2 l j 2 n l j1 j 2 j n l j n l 1 j n . (12.30) 1 Cała część (z lewej strony od kropki) jest nieistotna ponieważ e i 2k 1 i możemy zapisać kwantową transformację Fouriera jako j 2 n 2 0 1 e i 2 0, jn 1 1 0 2 e i 2 0, jn 1 jn 1 10 2 0 n e i 2 0, j1 j2 jn 1 n . Bramki do QFT A zatem kwantowe przekształcenie Fouriera jest niczym innym jak prostym przesunięciem fazowym poszczególnych kubitów: stan 1 każdego z n kubitów otrzymuje dodatkowy mnożnik fazowy. Ta operacja może być realizowana efektywnie za pomocą obwodu kwantowego zbudowanego z kilku prostych bramek kwantowych. Wprowadźmy unitarny (przesuwający fazę) operator 0 1 Rk 2i 2 k 0 e (12.31) i odpowiednią kontrolną Rk bramkę, która stosuje Rk do celowego (target) kubitu, jeżeli kontrolny kubit znajduje się w stanie 1 . W odpowiednim symbolicznym (rys.12.2) „drutowym diagramie” komputera kwantowego wykonującego kwantowe przekształcenie Fouriera, górny drut oznacza celowy kubit, dolny drut oznacza kontrolny kubit, a dane, jak zwykle, rozchodzą się z lewej strony w stronę prawą. Rys.12.2. Kontrolna Rk bramka Kontrolnych Rk bramek (dla różnych wartości k ) oraz bramek Hadamarda wystarczy dla zbudowania obwodu wykonującego kwantowe przekształcenie Fouriera (Rys.12.3). Rys.12.3. Obwód dla przekształcenia kwantowego Fouriera. Nie pokazane są swap bramki, które są potrzebne do przegrupowania wyjścia do dogodnej postaci 11 W celu analizy, jak obwód na rys.12.3 wykonuje kwantowe przekształcenie Fouriera, rozważmy wejściowy stan j1 j2 j n . Bramka Hadamarda działająca na pierwszy kubit generuje stan 2 1 / 2 0 e 2i 0, j1 1 j2 jn , (12.32) ponieważ e 2i 0, j1 1 1 . Kontrolna R2 bramka daje j 2 1 / 2 0 e 2i 0, j1 j2 1 j2 jn , (12.33) a kolejna kontrolna bramka R dodaje dodatkowe bity do eksponencjalnego fazowego mnożnika 1 1 , co daje w końcu 2 1 / 2 0 e 2i 0, j1 j2 jn 1 j 2 j n , (12.34) Drugi kubit rozważamy w podobny sposób. Bramka Hadamarda generuje 2 2 / 2 0 e 2i 0, j1 j2 jn 1 0 e 2i 0, j2 1 j3 j n , (12.35) a kontrolne R2 przez Rn1 bramek dodają bity mniejszego rzędu w eksponencjalnym fazowym mnożniku 1 2 , co daje w końcu 2 2 / 2 0 e 2i 0, j1 j2 jn 1 0 e 2i 0, j2 jn 1 j3 j n . (12.36) Przedłużając ten proces otrzymujemy na końcu 2 n / 2 0 e 2i 0, j1 j2 jn 1 0 e 2i 0, j2 jn 1 0 e 2i 0, jn 1 . (12.37) To jest prawie pożądany wynik, za wyjątkiem porządku kubitów, który można przegrupować za pomocą bramek SWAP. Ogólną liczbę operatorów (bramek) dla przekształcenia kwantowego Fouriera łatwo wyliczyć. Na pierwszy kubit działa bramka Hadamarda i n 1 kontrolnych R bramek, czyli w ogóle n bramek. Następny kubit potrzebuje na jedną kontrolną R bramkę mniej itd. A zatem, ogólna liczba bramek, pokazanych (jawnie) na rys.12.3 wynosi n (n 1) 1 n(n 1) / 2 . Oprócz tego potrzebne są około n / 2 bramek SWAP, każda z których zawiera trzy bramki CNOT. A więc kwantowe przekształcenie Fouriera potrzebuje rzędu n 2 bramek (operacji) dla transformacji Fouriera 2 n wejściowych danych. Ten wynik jest znacznie lepszy, niż FFT, który potrzebuje O(n2 n ) kroków, jak omawialiśmy wyżej. 12 Zauważmy jednak, że nie jest możliwym otrzymanie wszystkich amplitud końcowego stanu przekształcenia kwantowego Fouriera oraz nie jest możliwym efektywnie przygotować wejściowy stan dla dowolnych amplitud. To ogranicza zastosowanie QFT do specjalnej klasy aplikacji, takich jak algorytm Shora. 13