Nyní obrátíme pozornost k problému faktorizace celých čísel a uvidíme, jak jej lze efektivně vyřešit na kvantovém počítači pomocí odhadu fáze.
Algoritmus, který získáme, je Shorův algoritmus pro faktorizaci celých čísel.
Shor svůj algoritmus nepopsal přímo v termínech odhadu fáze, ale je to přirozený a intuitivní způsob, jak vysvětlit jeho fungování.
Začneme diskusí o mezilehlém problému známém jako problém nalezení řádu a uvidíme, jak odhad fáze poskytuje řešení tohoto problému.
Poté uvidíme, jak efektivní řešení problému nalezení řádu dává efektivní řešení problému faktorizace celých čísel.
(Když řešení jednoho problému poskytuje řešení jiného problému tímto způsobem, říkáme, že se druhý problém redukuje na první — takže v tomto případě redukujeme faktorizaci celých čísel na nalezení řádu.)
Tato druhá část Shorova algoritmu vůbec nevyužívá kvantové výpočty; je zcela klasická.
Kvantové výpočty jsou potřeba pouze k vyřešení nalezení řádu.
Problém nalezení řádu
Základy teorie čísel
Pro vysvětlení problému nalezení řádu a jak jej lze vyřešit pomocí odhadu fáze, bude užitečné začít několika základními koncepty teorie čísel a zavést přitom praktickou notaci.
Pro začátek, pro libovolné kladné celé číslo N definujeme množinu ZN takto.
ZN={0,1,…,N−1}
Například
Z1={0},
Z2={0,1},
Z3={0,1,2},
a tak dále.
Jsou to množiny čísel, ale můžeme je chápat jako víc než jen množiny.
Konkrétně můžeme uvažovat o aritmetických operacích na ZN, jako je sčítání a násobení — a pokud se dohodneme, že výsledky vždy bereme modulo N
(to znamená, vydělíme číslem N a jako výsledek vezmeme zbytek), při provádění těchto operací vždy zůstaneme v rámci této množiny.
Dvě konkrétní operace sčítání a násobení, obě modulo N, dělají z ZN okruh, což je fundamentálně důležitý typ objektu v algebře.
Například 3 a 5 jsou prvky Z7 a pokud je spolu vynásobíme, dostaneme 3⋅5=15, což při dělení číslem 7 dává zbytek 1.
Někdy to vyjadřujeme následovně.
3⋅5≡1(mod 7)
Můžeme ale také jednoduše napsat 3⋅5=1, za předpokladu, že bylo jasně řečeno, že pracujeme v Z7, jen abychom notaci co nejvíce zjednodušili.
Jako příklad zde jsou tabulky sčítání a násobení pro Z6.
+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321
Mezi N prvky ZN jsou speciální ty prvky a∈ZN, které splňují gcd(a,N)=1.
Množina obsahující tyto prvky se často označuje hvězdičkou, takto.
ZN∗={a∈ZN:gcd(a,N)=1}
Pokud zaměříme pozornost na operaci násobení, množina ZN∗ tvoří grupu — konkrétně abelovskou grupu — což je další důležitý typ objektu v algebře.
Je to základní fakt o těchto množinách (a konečných grupách obecně), že pokud si zvolíme libovolný prvek a∈ZN∗ a opakovaně násobíme a samo sebou, vždy nakonec dostaneme číslo 1.
Jako první příklad vezměme N=6.
Platí, že 5∈Z6∗, protože gcd(5,6)=1, a pokud vynásobíme 5 samo sebou, dostaneme 1,
jak potvrzuje tabulka výše.
52=1(pracujeme v Z6)
Jako druhý příklad vezměme N=21.
Pokud projdeme čísla od 0 do 20, ta, která mají GCD rovný 1 s číslem 21, jsou následující.
Z21∗={1,2,4,5,8,10,11,13,16,17,19,20}
Pro každý z těchto prvků je možné umocnit toto číslo na kladné celé číslo a dostat 1.
Zde jsou nejmenší mocniny, pro které to funguje:
11=126=143=156=182=1106=1116=1132=1163=1176=1196=1202=1
Přirozeně pracujeme v Z21 ve všech těchto rovnicích, což jsme se neobtěžovali psát — považujeme to za implicitní, abychom věci zbytečně nekomplikovali. V tom budeme pokračovat po zbytek této lekce.
Formulace problému a spojení s odhadem fáze
Nyní můžeme formulovat problém nalezení řádu.
Nalezení řádu
Vstup: kladná celá čísla N a a splňující gcd(N,a)=1
Výstup: nejmenší kladné celé číslo r takové, že ar≡1 (mod N)
Alternativně, v notaci, kterou jsme právě zavedli výše, je nám dáno a∈ZN∗ a hledáme nejmenší kladné celé číslo r takové, že ar=1.
Toto číslo r se nazývá řád prvku a modulo N.
Pro spojení problému nalezení řádu s odhadem fáze se zamysleme nad operací definovanou na systému, jehož klasické stavy odpovídají ZN, kde násobíme pevným prvkem a∈ZN∗.
Ma∣x⟩=∣ax⟩(pro kazˇdeˊ x∈ZN)
Pro upřesnění, násobení provádíme v ZN, takže je implicitní, že uvnitř ketu na pravé straně rovnice bereme součin modulo N.
Například pokud vezmeme N=15 a a=2, pak působení M2 na standardní bázi {∣0⟩,…,∣14⟩} je následující.
M2∣0⟩=∣0⟩M2∣1⟩=∣2⟩M2∣2⟩=∣4⟩M2∣3⟩=∣6⟩M2∣4⟩=∣8⟩M2∣5⟩=∣10⟩M2∣6⟩=∣12⟩M2∣7⟩=∣14⟩M2∣8⟩=∣1⟩M2∣9⟩=∣3⟩M2∣10⟩=∣5⟩M2∣11⟩=∣7⟩M2∣12⟩=∣9⟩M2∣13⟩=∣11⟩M2∣14⟩=∣13