Langkau ke kandungan utama

Algoritma Shor

Sekarang kita akan beralih perhatian kepada masalah pemfaktoran integer, dan lihat bagaimana ia boleh diselesaikan dengan cekap pada komputer kuantum menggunakan penganggaran fasa. Algoritma yang akan kita peroleh ialah algoritma Shor untuk pemfaktoran integer. Shor tidak menggambarkan algoritmanya khususnya dalam sebutan penganggaran fasa, tetapi itu adalah cara yang semula jadi dan intuitif untuk menerangkan cara ia berfungsi.

Kita akan mulakan dengan membincangkan masalah perantaraan yang dikenali sebagai masalah pencarian order dan melihat bagaimana penganggaran fasa memberikan penyelesaian kepada masalah ini. Kemudian kita akan lihat bagaimana penyelesaian yang cekap kepada masalah pencarian order memberi kita penyelesaian yang cekap kepada masalah pemfaktoran integer. (Apabila penyelesaian kepada satu masalah memberikan penyelesaian kepada masalah lain seperti ini, kita katakan masalah kedua diturunkan kepada yang pertama — jadi dalam kes ini kita menurunkan pemfaktoran integer kepada pencarian order.) Bahagian kedua algoritma Shor ini langsung tidak menggunakan pengiraan kuantum; ia sepenuhnya klasik. Pengiraan kuantum hanya diperlukan untuk menyelesaikan pencarian order.

Masalah pencarian order

Beberapa teori nombor asas

Untuk menerangkan masalah pencarian order dan cara ia boleh diselesaikan menggunakan penganggaran fasa, adalah berguna untuk bermula dengan beberapa konsep teori nombor asas, dan memperkenalkan beberapa notasi yang berguna sepanjang jalan.

Untuk bermula, bagi sebarang integer positif N,N, takrifkan set ZN\mathbb{Z}_N seperti berikut.

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

Sebagai contoh, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; dan seterusnya.

Ini adalah set nombor, tetapi kita boleh memikirkannya sebagai lebih daripada sekadar set. Khususnya, kita boleh memikirkan operasi aritmetik pada ZN\mathbb{Z}_N seperti penambahan dan pendaraban — dan jika kita bersetuju untuk sentiasa mengambil jawapan kita modulo NN (iaitu, bahagikan dengan NN dan ambil bakinya sebagai hasil), kita akan sentiasa kekal dalam set ini apabila melakukan operasi-operasi ini. Dua operasi khusus penambahan dan pendaraban, kedua-duanya diambil modulo N,N, menjadikan ZN\mathbb{Z}_N sebagai sebuah gelanggang, yang merupakan jenis objek yang sangat penting dalam algebra.

Sebagai contoh, 33 dan 55 adalah elemen Z7,\mathbb{Z}_7, dan jika kita mendarabkan mereka bersama kita mendapat 35=15,3\cdot 5 = 15, yang meninggalkan baki 11 apabila dibahagikan dengan 7.7. Kadangkala kita ungkapkan ini seperti berikut.

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

Tetapi kita juga boleh menulis 35=1,3 \cdot 5 = 1, dengan syarat telah dijelaskan bahawa kita bekerja dalam Z7,\mathbb{Z}_7, hanya untuk memastikan notasi kita semudah mungkin.

Sebagai contoh, berikut adalah jadual penambahan dan pendaraban untuk 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}

Antara NN elemen ZN,\mathbb{Z}_N, elemen aZNa\in\mathbb{Z}_N yang memenuhi gcd(a,N)=1\gcd(a,N) = 1 adalah istimewa. Kerap kali set yang mengandungi elemen-elemen ini dilambangkan dengan tanda bintang seperti berikut.

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

Jika kita menumpukan perhatian pada operasi pendaraban, set ZN\mathbb{Z}_N^{\ast} membentuk sebuah kumpulan — khususnya kumpulan abelian — yang merupakan satu lagi jenis objek penting dalam algebra. Ia adalah fakta asas tentang set-set ini (dan kumpulan terhingga secara umum), bahawa jika kita memilih mana-mana elemen aZNa\in\mathbb{Z}_N^{\ast} dan mendarabkan aa berulang kali kepada dirinya sendiri, kita akan sentiasa akhirnya mendapat nombor 1.1.

Sebagai contoh pertama, mari kita ambil N=6.N=6. Kita ada bahawa 5Z65\in\mathbb{Z}_6^{\ast} kerana gcd(5,6)=1,\gcd(5,6) = 1, dan jika kita mendarabkan 55 kepada dirinya sendiri kita mendapat 1,1, seperti yang disahkan oleh jadual di atas.

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

Sebagai contoh kedua, mari kita ambil N=21.N = 21. Jika kita melalui nombor dari 00 hingga 20,20, yang mempunyai GCD sama dengan 11 dengan 2121 adalah seperti berikut.

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

Bagi setiap elemen ini, adalah mungkin untuk menaikkan nombor itu kepada kuasa integer positif untuk mendapat 1.1. Berikut adalah kuasa terkecil yang berfungsi:

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}

Sudah tentu kita bekerja dalam Z21\mathbb{Z}_{21} untuk semua persamaan ini, yang tidak kita tulis — kita anggap ia tersirat untuk mengelakkan kerumitan. Kita akan terus berbuat demikian sepanjang sisa pelajaran ini.

Pernyataan masalah dan hubungan dengan penganggaran fasa

Sekarang kita boleh menyatakan masalah pencarian order.

Pencarian order

Input: integer positif NN dan aa yang memenuhi gcd(N,a)=1\gcd(N,a) = 1
Output: integer positif terkecil rr supaya ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

Sebagai alternatif, dalam sebutan notasi yang baru kita perkenalkan di atas, kita diberi aZN,a \in \mathbb{Z}_N^{\ast}, dan kita mencari integer positif terkecil rr supaya ar=1.a^r = 1. Nombor rr ini dipanggil order bagi aa modulo N.N.

Untuk menghubungkan masalah pencarian order dengan penganggaran fasa, mari kita fikirkan tentang operasi yang ditakrifkan pada sistem yang keadaan klasiknya berpadanan dengan ZN,\mathbb{Z}_N, di mana kita mendarab dengan elemen tetap 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$)}

Untuk lebih jelas, kita melakukan pendaraban dalam ZN,\mathbb{Z}_N, jadi ia tersirat bahawa kita mengambil hasil darab modulo NN di dalam ket pada sebelah kanan persamaan.

Sebagai contoh, jika kita ambil N=15N = 15 dan a=2,a=2, maka tindakan M2M_2 pada asas piawai {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} adalah seperti berikut.

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}

Ini adalah operasi unitary dengan syarat gcd(a,N)=1;\gcd(a,N)=1; ia mengocok elemen asas piawai {0,,N1},\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, jadi sebagai matriks ia adalah matriks permutasi. Jelas dari takrifannya bahawa operasi ini adalah deterministik, dan cara mudah untuk melihat bahawa ia boleh dinyahbalik adalah dengan memikirkan order rr bagi aa modulo N,N, dan menyedari bahawa penyongsangan MaM_a adalah 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}

Ada cara lain untuk memikirkan penyongsangan yang tidak memerlukan sebarang pengetahuan tentang rr (yang, setelah semua, adalah apa yang kita cuba kira). Bagi setiap elemen aZNa\in\mathbb{Z}_N^{\ast} sentiasa ada elemen unik bZNb\in\mathbb{Z}_N^{\ast} yang memenuhi ab=1.ab=1. Kita tandakan elemen bb ini dengan a1,a^{-1}, dan ia boleh dikira dengan cekap; sambungan algoritma GCD Euclid melakukannya dengan kos kuadratik dalam lg(N).\operatorname{lg}(N). Dan dengan itu

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

Jadi, operasi MaM_a adalah deterministik dan boleh dinyahbalik. Ini bermakna ia diterangkan oleh matriks permutasi, dan oleh itu adalah unitary.

Sekarang mari kita fikirkan tentang vektor eigen dan nilai eigen operasi Ma,M_a, dengan mengandaikan bahawa aZN.a\in\mathbb{Z}_N^{\ast}. Seperti yang baru sahaja dihujahkan, andaian ini memberitahu kita bahawa MaM_a adalah unitary.

Terdapat NN nilai eigen Ma,M_a, mungkin termasuk nilai eigen yang sama berulang beberapa kali, dan secara umum ada kebebasan dalam memilih vektor eigen yang sepadan — tetapi kita tidak perlu risau tentang semua kemungkinan. Mari kita mulakan dengan mudah dan kenalpasti hanya satu vektor eigen 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}}

Nombor rr adalah order bagi aa modulo N,N, di sini dan sepanjang sisa pelajaran ini. Nilai eigen yang berkaitan dengan vektor eigen ini adalah 11 kerana ia tidak berubah apabila kita mendarab dengan 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

Ini berlaku kerana ar=1,a^r = 1, jadi setiap keadaan asas piawai ak\vert a^k \rangle dialihkan ke ak+1\vert a^{k+1} \rangle untuk kr1,k\leq r-1, dan ar1\vert a^{r-1} \rangle dialihkan kembali ke 1.\vert 1\rangle. Secara kasarnya, ia seperti kita mengacau ψ0\vert \psi_0 \rangle perlahan-lahan, tetapi ia sudah sepenuhnya teracau jadi tiada apa yang berubah.

Berikut adalah contoh lain vektor eigen Ma.M_a. Yang ini lebih menarik dalam konteks pencarian order dan penganggaran fasa.

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

Sebagai alternatif, kita boleh menulis vektor ini menggunakan hasil tambah seperti berikut.

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

Di sini kita melihat nombor kompleks ωr=e2πi/r\omega_r = e^{2\pi i/r} muncul secara semula jadi, disebabkan cara pendaraban dengan aa berfungsi modulo N.N. Kali ini nilai eigen yang sepadan adalah ωr.\omega_r. Untuk melihat ini, kita boleh mengira seperti berikut.

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

Kemudian, kerana ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 dan ar=1=a0,\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, kita lihat bahawa

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,

jadi Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Menggunakan penaakulan yang sama, kita boleh mengenal pasti pasangan vektor eigen/nilai eigen tambahan untuk Ma.M_a. Bagi sebarang pilihan j{0,,r1}j\in\{0,\ldots,r-1\} kita ada bahawa

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

adalah vektor eigen MaM_a yang nilai eigennya adalah ωrj.\omega_r^j.

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

Terdapat vektor eigen lain bagi Ma,M_a, tetapi kita tidak perlu memikirkannya — kita akan fokus semata-mata pada vektor eigen ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle yang baru kita kenalpasti.

Pencarian peringkat melalui anggaran fasa

Untuk menyelesaikan masalah pencarian peringkat bagi pilihan aZNa\in\mathbb{Z}_N^{\ast} yang diberikan, kita boleh menggunakan prosedur anggaran fasa ke atas operasi Ma.M_a.

Untuk melakukan ini, kita perlu melaksanakan bukan sahaja MaM_a dengan cekap menggunakan Circuit kuantum, tetapi juga Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, dan seterusnya, sejauh yang diperlukan untuk mendapatkan anggaran yang cukup tepat daripada prosedur anggaran fasa. Di sini kita akan terangkan cara ini boleh dilakukan, dan kita akan menentukan dengan tepat berapa banyak ketepatan yang diperlukan kemudian.

Mari kita mulakan dengan operasi MaM_a itu sendiri. Secara semula jadi, kerana kita bekerja dengan model Circuit kuantum, kita akan menggunakan notasi perduaan untuk mengekod nombor antara 00 dan N1.N-1. Nombor terbesar yang perlu kita ekodkan ialah N1,N-1, jadi bilangan bit yang diperlukan ialah

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

Sebagai contoh, jika N=21N = 21 kita dapat n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Ini rupa pengekodkan elemen Z21\mathbb{Z}_{21} sebagai rentetan perduaan panjang 5.5.

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

Dan kini, ini definisi tepat bagaimana MaM_a ditakrifkan sebagai operasi nn-Qubit.

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}

Intinya ialah walaupun kita hanya peduli tentang cara MaM_a berfungsi untuk 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle, kita memang perlu menentukan cara ia berfungsi untuk baki 2nN2^n - N keadaan asas piawai — dan kita perlu melakukan ini dengan cara yang masih memberikan operasi unitari. Dengan menakrifkan MaM_a supaya ia tidak melakukan apa-apa kepada keadaan asas piawai yang selebihnya, matlamat ini tercapai.

Menggunakan algoritma untuk pendaraban integer dan pembahagian yang dibincangkan dalam pelajaran sebelumnya, bersama-sama dengan metodologi untuk pelaksanaan boleh-balik bebas-sampah bagi algoritma tersebut, kita boleh membina Circuit kuantum yang menjalankan Ma,M_a, untuk sebarang pilihan aZN,a\in\mathbb{Z}_N^{\ast}, dengan kos O(n2).O(n^2). Berikut adalah satu cara ia boleh dilakukan.

  1. Bina Circuit untuk menjalankan operasi

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

    di mana

    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}

    menggunakan kaedah yang diterangkan dalam pelajaran sebelumnya. Ini memberi kita Circuit bersaiz O(n2).O(n^2).

  2. Tukar dua sistem nn-Qubit menggunakan nn gate swap untuk menukar Qubit satu per satu.

  3. Sama seperti langkah pertama, bina Circuit untuk operasi

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

    di mana a1a^{-1} ialah songsangan aa dalam ZN.\mathbb{Z}_N^{\ast}.

Dengan memulakan nn Qubit bawah dan menggabungkan tiga langkah, kita mendapat transformasi ini:

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

Kaedah ini memerlukan Qubit ruang kerja, tetapi ia dipulangkan ke keadaan mulanya pada akhir, yang membolehkan kita menggunakan Circuit ini untuk anggaran fasa. Jumlah kos Circuit yang kita peroleh ialah O(n2).O(n^2).

Untuk menjalankan Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, dan seterusnya, kita boleh menggunakan kaedah yang sama persis, kecuali kita menggantikan aa dengan a2,a^2, a4,a^4, a8,a^8, dan seterusnya, sebagai elemen ZN.\mathbb{Z}_N^{\ast}. Artinya, untuk sebarang kuasa kk yang kita pilih, kita boleh mencipta Circuit untuk MakM_a^k bukan dengan mengulang kk kali Circuit untuk Ma,M_a, tetapi sebaliknya dengan mengira b=akZNb = a^k \in \mathbb{Z}_N^{\ast} dan kemudian menggunakan Circuit untuk Mb.M_b.

Pengiraan kuasa akZNa^k \in \mathbb{Z}_N adalah masalah pemangkatan modular yang disebut dalam pelajaran sebelumnya. Pengiraan ini boleh dilakukan secara klasik, menggunakan algoritma pemangkatan modular yang disebut dalam pelajaran sebelumnya (sering disebut algoritma kuasa dalam teori nombor komputasi). Malah, kita hanya memerlukan kuasa pangkat-2 bagi a,a, khususnya a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, dan kita boleh mendapatkan kuasa-kuasa ini dengan mengkuasaduakan secara berulang sebanyak m1m-1 kali. Setiap pengkuasaduaan boleh dilakukan oleh Circuit Boolean bersaiz O(n2).O(n^2).

Pada dasarnya, apa yang kita lakukan di sini ialah memindahkan masalah mengulang MaM_a sebanyak 2m12^{m-1} kali kepada pengiraan klasik yang cekap. Dan bernasib baik bahawa ini mungkin dilakukan! Untuk pilihan Circuit kuantum sewenang-wenang dalam masalah anggaran fasa, kemungkinan ini tidak mungkin — dan dalam kes itu kos anggaran fasa yang terhasil berkembang secara eksponen dalam bilangan Qubit kawalan m.m.

Penyelesaian dengan eigenvector yang sesuai

Untuk memahami cara kita menyelesaikan masalah pencarian peringkat menggunakan anggaran fasa, mari kita mulakan dengan andaian bahawa kita menjalankan prosedur anggaran fasa ke atas operasi MaM_a menggunakan eigenvector ψ1.\vert\psi_1\rangle. Mendapatkan eigenvector ini tidaklah mudah, ternyata, jadi ini bukan penghujung cerita — tetapi berguna untuk bermula di sini.

Nilai eigen MaM_a yang sepadan dengan eigenvector ψ1\vert \psi_1\rangle ialah

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

Iaitu, ωr=e2πiθ\omega_r = e^{2\pi i \theta} untuk θ=1/r.\theta = 1/r. Jadi, jika kita menjalankan prosedur anggaran fasa ke atas MaM_a menggunakan eigenvector ψ1,\vert\psi_1\rangle, kita akan mendapat anggaran bagi 1/r.1/r. Dengan mengira songsangannya kita akan dapat mengetahui rr — dengan syarat anggaran kita cukup baik.

Secara lebih terperinci, apabila kita menjalankan prosedur anggaran fasa menggunakan mm Qubit kawalan, yang kita perolehi ialah nombor y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Kemudian kita ambil y/2my/2^m sebagai teka-teki untuk θ,\theta, yang dalam kes ini ialah 1/r.1/r. Untuk mengetahui rr daripada anggaran ini, perkara yang wajar dilakukan ialah mengira songsangan anggaran kita dan membundarkan kepada integer terdekat.

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

Sebagai contoh, katakan r=6r = 6 dan kita menjalankan anggaran fasa ke atas MaM_a dengan eigenvector ψ1\vert\psi_1\rangle menggunakan m=5m = 5 bit kawalan. Anggaran 55 bit terbaik kepada 1/r=1/61/r = 1/6 ialah 5/32,5/32, dan kita mempunyai peluang yang agak baik (kira-kira 68%68\% dalam kes ini) untuk mendapat hasil y=5y=5 daripada anggaran fasa. Kita ada

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

dan membundarkan kepada integer terdekat memberi 6,6, iaitu jawapan yang betul.

Sebaliknya, jika kita tidak menggunakan ketepatan yang cukup, kita mungkin tidak mendapat jawapan yang betul. Contohnya, jika kita mengambil m=4m = 4 Qubit kawalan dalam anggaran fasa, kita mungkin mendapat anggaran 44 bit terbaik kepada 1/r=1/6,1/r = 1/6, iaitu 3/16.3/16. Mengira songsangannya menghasilkan

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

dan membundarkan kepada integer terdekat memberi jawapan yang salah iaitu 5.5.

Jadi berapa banyak ketepatan yang kita perlukan untuk mendapat jawapan yang betul? Kita tahu bahawa peringkat rr adalah integer, dan secara intuitif apa yang kita perlukan ialah ketepatan yang cukup untuk membezakan 1/r1/r daripada kemungkinan berdekatan, termasuk 1/(r+1)1/(r+1) dan 1/(r1).1/(r-1). Nombor yang paling rapat dengan 1/r1/r yang perlu kita bimbangkan ialah 1/(r+1),1/(r+1), dan jarak antara dua nombor ini ialah

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

Jadi, jika kita ingin memastikan kita tidak silap 1/r1/r dengan 1/(r+1),1/(r+1), cukuplah menggunakan ketepatan yang menjamin anggaran terbaik y/2my/2^m kepada 1/r1/r lebih rapat kepada 1/r1/r berbanding 1/(r+1).1/(r+1). Jika kita menggunakan ketepatan yang cukup supaya

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

supaya ralat kurang daripada separuh jarak antara 1/r1/r dan 1/(r+1),1/(r+1), maka y/2my/2^m akan lebih rapat kepada 1/r1/r berbanding mana-mana kemungkinan lain, termasuk 1/(r+1)1/(r+1) dan 1/(r1).1/(r-1).

Kita boleh menyemak ini seperti berikut. Andaikan bahawa

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

untuk ε\varepsilon yang memenuhi

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

Apabila kita mengira songsangannya kita dapat

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

Dengan memaksimumkan pengangka dan meminimumkan penyebut, kita boleh menganggar sejauh mana kita dari rr seperti berikut.

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

Kita kurang dari 1/21/2 jauh dari r,r, jadi seperti yang dijangkakan kita akan mendapat rr apabila membundarkan.

Malangnya, kerana kita belum tahu r,r, kita tidak boleh menggunakannya untuk memberitahu kita berapa banyak ketepatan yang diperlukan. Apa yang boleh kita lakukan sebaliknya ialah menggunakan fakta bahawa rr mestilah lebih kecil dari NN untuk memastikan kita menggunakan ketepatan yang mencukupi. Khususnya, jika kita menggunakan ketepatan yang cukup untuk menjamin anggaran terbaik y/2my/2^m kepada 1/r1/r memenuhi

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

maka kita akan mempunyai ketepatan yang cukup untuk menentukan rr dengan betul apabila kita mengira songsangannya. Mengambil m=2lg(N)+1m = 2\operatorname{lg}(N)+1 memastikan kita mempunyai peluang tinggi untuk mendapat anggaran dengan ketepatan ini menggunakan kaedah yang diterangkan sebelumnya. (Mengambil m=2lg(N)m = 2\operatorname{lg}(N) sudah cukup jika kita selesa dengan had bawah 40% untuk kebarangkalian kejayaan.)

Penyelesaian umum

Seperti yang baru kita lihat, jika kita mempunyai eigenvector ψ1\vert \psi_1 \rangle bagi Ma,M_a, kita boleh mengetahui rr melalui anggaran fasa, selagi kita menggunakan Qubit kawalan yang cukup untuk melakukan ini dengan ketepatan yang mencukupi. Malangnya, tidak mudah untuk mendapatkan eigenvector ψ1,\vert\psi_1\rangle, jadi kita perlu memikirkan cara untuk meneruskan.

Mari kita andaikan seketika bahawa kita meneruskan seperti di atas, tetapi dengan eigenvector ψk\vert\psi_k\rangle menggantikan ψ1,\vert\psi_1\rangle, untuk sebarang pilihan k{0,,r1}k\in\{0,\ldots,r-1\} yang kita pilih untuk fikirkan. Hasil yang kita peroleh daripada prosedur anggaran fasa akan menjadi anggaran

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

Dengan andaian bahawa kita tidak mengetahui sama ada kk mahupun r,r, ini mungkin atau mungkin tidak membolehkan kita mengenal pasti r.r. Contohnya, jika k=0k = 0 kita akan mendapat anggaran y/2my/2^m kepada 0,0, yang malangnya tidak memberitahu kita apa-apa. Walau bagaimanapun, ini kes yang luar biasa; untuk nilai kk yang lain, kita sekurang-kurangnya akan dapat mempelajari sesuatu tentang r.r.

Kita boleh menggunakan algoritma yang dikenali sebagai algoritma pecahan berterusan untuk menukar anggaran y/2my/2^m kita kepada pecahan-pecahan berdekatan — termasuk k/rk/r jika anggaran cukup baik. Kita tidak akan menerangkan algoritma pecahan berterusan di sini. Sebaliknya, ini adalah pernyataan fakta yang diketahui tentang algoritma ini.

Fakta

Diberi integer N2N\geq 2 dan nombor nyata α(0,1),\alpha\in(0,1), terdapat paling banyak satu pilihan integer u,v{0,,N1}u,v\in\{0,\ldots,N-1\} dengan v0v\neq 0 dan gcd(u,v)=1\gcd(u,v)=1 yang memenuhi αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. Diberi α\alpha dan N,N, algoritma pecahan berterusan mencari uu dan v,v, atau melaporkan bahawa ia tidak wujud. Algoritma ini boleh dilaksanakan sebagai Circuit Boolean bersaiz O((lg(N))3).O((\operatorname{lg}(N))^3).

Jika kita mempunyai anggaran y/2my/2^m yang sangat rapat kepada k/r,k/r, dan kita menjalankan algoritma pecahan berterusan untuk NN dan α=y/2m,\alpha = y/2^m, kita akan mendapat uu dan v,v, seperti yang diterangkan dalam fakta tersebut. Analisis fakta tersebut membolehkan kita menyimpulkan bahawa

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

Perhatikan khususnya bahawa kita tidak semestinya mengetahui kk dan r,r, kita hanya mengetahui k/rk/r dalam sebutan paling mudah.

Sebagai contoh, dan seperti yang sudah kita perhatikan, kita tidak akan mempelajari apa-apa daripada k=0.k=0. Tetapi itulah satu-satunya nilai kk di mana perkara itu berlaku. Apabila kk bukan sifar, ia mungkin mempunyai faktor sepunya dengan r,r, tetapi nombor vv yang kita peroleh daripada algoritma pecahan berterusan sekurang-kurangnya mesti membahagi r.r.

Ia jauh dari jelas, tetapi ia memang benar bahawa jika kita mempunyai kemampuan untuk mengetahui uu dan vv untuk u/v=k/ru/v = k/r bagi k{0,,r1}k\in\{0,\ldots,r-1\} yang dipilih secara seragam rawak, maka kita berkemungkinan besar dapat memulihkan rr selepas beberapa sampel sahaja. Khususnya, jika teka-teki kita untuk rr ialah gandaan sepunya terkecil bagi semua nilai penyebut vv yang kita perhatikan, kita akan betul dengan kebarangkalian tinggi. Secara intuitif, sesetengah nilai kk tidak baik kerana ia mempunyai faktor sepunya dengan r,r, dan faktor-faktor sepunya itu tersembunyi daripada kita apabila kita mengetahui uu dan v.v. Tetapi pilihan kk secara rawak tidak mungkin menyembunyikan faktor rr untuk lama, dan kebarangkalian bahawa kita tidak meneka rr dengan betul melalui gandaan sepunya terkecil penyebut yang kita perhatikan susut secara eksponen dalam bilangan sampel.

Masalah cara kita mendapatkan eigenvector ψk\vert\psi_k\rangle bagi MaM_a untuk menjalankan prosedur anggaran fasa masih perlu ditangani. Rupanya, kita sebenarnya tidak perlu menciptanya!

Apa yang akan kita lakukan sebaliknya ialah menjalankan prosedur anggaran fasa ke atas keadaan 1,\vert 1\rangle, yang bermaksud pengekodkan perduaan nn-bit bagi nombor 1,1, sebagai ganti eigenvector ψ\vert\psi\rangle bagi Ma.M_a. Setakat ini, kita hanya bercakap tentang menjalankan prosedur anggaran fasa ke atas eigenvector tertentu, tetapi tiada apa yang menghalang kita daripada menjalankan prosedur ke atas keadaan input yang bukan eigenvector Ma,M_a, dan itulah yang kita lakukan di sini dengan keadaan 1.\vert 1\rangle. (Ini bukan eigenvector bagi MaM_a melainkan a=1,a=1, yang bukan pilihan yang kita minati.)

Rasional untuk memilih keadaan 1\vert 1\rangle sebagai ganti eigenvector MaM_a ialah persamaan berikut adalah benar.

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

Satu cara untuk mengesahkan persamaan ini ialah dengan membandingkan hasil darab dalaman kedua-dua sisi dengan setiap keadaan asas piawai, menggunakan formula yang disebutkan sebelumnya dalam pelajaran untuk membantu menilai hasil bagi sebelah kanan. Akibatnya, kita akan mendapat tepat-tepat hasil pengukuran yang sama seolah-olah kita telah memilih k{0,,r1}k\in\{0,\ldots,r-1\} secara seragam rawak dan menggunakan ψk\vert\psi_k\rangle sebagai eigenvector.

Secara lebih terperinci, bayangkan kita menjalankan prosedur anggaran fasa dengan keadaan 1\vert 1\rangle sebagai ganti salah satu eigenvector ψk.\vert\psi_k\rangle. Selepas jelmaan Fourier kuantum songsang dilakukan, ini meninggalkan kita dengan keadaan

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

di mana

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

Vektor γk\vert\gamma_k\rangle mewakili keadaan mm Qubit atas selepas songsangan jelmaan Fourier kuantum dilakukan ke atasnya.

Jadi, berdasarkan fakta bahawa {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} adalah set ortonormal, kita dapati bahawa pengukuran mm Qubit atas menghasilkan anggaran y/2my/2^m kepada nilai k/rk/r di mana k{0,,r1}k\in\{0,\ldots,r-1\} dipilih secara seragam rawak. Seperti yang sudah kita bincangkan, ini membolehkan kita mengetahui rr dengan keyakinan tinggi selepas beberapa larian bebas, yang merupakan matlamat kita.

Jumlah kos

Kos untuk melaksanakan setiap unitari-berkawalan MakM_a^k ialah O(n2).O(n^2). Terdapat mm operasi unitari-berkawalan, dan kita mempunyai m=O(n),m = O(n), jadi jumlah kos untuk operasi unitari-berkawalan ialah O(n3).O(n^3). Selain itu, kita mempunyai mm Gate Hadamard (yang menyumbang O(n)O(n) kepada kos), dan jelmaan Fourier kuantum songsang menyumbang O(n2)O(n^2) kepada kos. Oleh itu, kos operasi unitari-berkawalan mendominasi kos keseluruhan prosedur — yang oleh itu ialah O(n3).O(n^3).

Selain Circuit kuantum itu sendiri, terdapat beberapa pengiraan klasik yang perlu dilakukan sepanjang jalan. Ini termasuk mengira kuasa aka^k dalam ZN\mathbb{Z}_N untuk k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1}, yang diperlukan untuk mencipta Gate unitari-berkawalan, serta algoritma pecahan berterusan yang menukar anggaran θ\theta kepada pecahan. Pengiraan-pengiraan ini boleh dilakukan oleh Circuit Boolean dengan jumlah kos O(n3).O(n^3).

Seperti biasa, semua had ini boleh diperbaiki menggunakan algoritma yang cekap secara asimptotik; had ini mengandaikan kita menggunakan algoritma piawai untuk operasi aritmetik asas.

Pemfaktoran melalui pencarian peringkat

Perkara terakhir yang perlu kita bincangkan ialah bagaimana menyelesaikan masalah pencarian peringkat membantu kita untuk memfaktorkan. Bahagian ini sepenuhnya klasik — ia tidak ada kaitan khusus dengan pengkomputeran kuantum.

Begini idea asasnya. Kita ingin memfaktorkan nombor N,N, dan kita boleh melakukan ini secara rekursif. Khususnya, kita boleh menumpukan pada tugasan memisahkan N,N, yang bermaksud mencari mana-mana dua integer b,c2b,c\geq 2 dengan N=bc.N = bc. Ini tidak mungkin jika NN adalah nombor perdana, tetapi kita boleh menguji dengan cekap sama ada NN perdana menggunakan algoritma ujian keprerdanaan terlebih dahulu, dan jika NN bukan perdana kita akan cuba memisahkannya. Setelah kita memisahkan N,N, kita boleh secara rekursif berulang ke bb dan cc sehingga semua faktor kita adalah perdana dan kita mendapat pemfaktoran perdana N.N.

Memisahkan integer genap adalah mudah: kita hanya keluarkan 22 dan N/2.N/2.

Mudah juga untuk memisahkan kuasa sempurna, iaitu nombor dalam bentuk N=sjN = s^j untuk integer s,j2,s,j\geq 2, hanya dengan menganggar punca N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, dan seterusnya, dan memeriksa integer berdekatan sebagai suspek untuk s.s. Kita tidak perlu pergi lebih jauh dari log(N)\log(N) langkah dalam jujukan ini, kerana pada ketika itu punca jatuh di bawah 22 dan tidak akan mendedahkan calon tambahan.

Bagus bahawa kita boleh melakukan kedua-dua perkara ini kerana pencarian peringkat tidak akan membantu kita memfaktorkan nombor genap atau kuasa perdana, di mana nombor ss kebetulan adalah perdana. Jika NN ganjil dan bukan kuasa perdana, bagaimanapun, pencarian peringkat membolehkan kita memisahkan N.N.

Algoritma kebarangkalian untuk memisahkan integer ganjil, komposit N yang bukan kuasa perdana
  1. Pilih secara rawak a{2,,N1}.a\in\{2,\ldots,N-1\}.

  2. Kira d=gcd(a,N).d=\gcd(a,N).

  3. Jika d>1d > 1 maka keluarkan b=db = d dan c=N/dc = N/d dan berhenti. Jika tidak teruskan ke langkah berikutnya dengan mengetahui bahawa aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Biar rr ialah peringkat aa modulo N.N. (Di sinilah kita memerlukan pencarian peringkat.)

  5. Jika rr genap:

    5.1 Kira x=ar/21x = a^{r/2} - 1 modulo NN
    5.2 Kira d=gcd(x,N).d = \gcd(x,N).
    5.3 Jika d>1d>1 maka keluarkan b=db=d dan c=N/dc = N/d dan berhenti.

  6. Jika titik ini dicapai, algoritma telah gagal mencari faktor N.N.

Satu larian algoritma ini mungkin gagal mencari faktor N.N. Khususnya, ini berlaku dalam dua situasi:

  • Peringkat aa modulo NN adalah ganjil.
  • Peringkat aa modulo NN adalah genap dan gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Menggunakan teori nombor asas boleh dibuktikan bahawa, untuk pilihan rawak a,a, dengan kebarangkalian sekurang-kurangnya 1/21/2 tiada satu pun daripada peristiwa ini berlaku. Malah, kebarangkalian bahawa mana-mana peristiwa berlaku adalah paling banyak 2(m1)2^{-(m-1)} untuk mm ialah bilangan faktor perdana berbeza N,N, itulah sebabnya andaian bahawa NN bukan kuasa perdana diperlukan. (Andaian bahawa NN ganjil juga diperlukan agar fakta ini benar.)

Ini bermakna setiap larian mempunyai sekurang-kurangnya 50% peluang untuk memisahkan N.N. Oleh itu, jika kita menjalankan algoritma tt kali, memilih aa secara rawak setiap kali, kita akan berjaya memisahkan NN dengan kebarangkalian sekurang-kurangnya 12t.1 - 2^{-t}.

Idea asas di sebalik algoritma ini adalah seperti berikut. Jika kita mempunyai pilihan aa di mana peringkat rr bagi aa modulo NN adalah genap, maka r/2r/2 adalah integer dan kita boleh mempertimbangkan nombor-nombor

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

Menggunakan formula Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), kita simpulkan bahawa

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

Kini, kita tahu bahawa ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 mengikut definisi peringkat — yang merupakan cara lain untuk mengatakan bahawa NN membahagi tepat ar1.a^r - 1. Ini bermakna NN membahagi tepat hasil darab

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

Agar ini benar, semua faktor perdana NN mestilah juga faktor perdana ar/21a^{r/2} - 1 atau ar/2+1a^{r/2} + 1 (atau kedua-duanya) — dan untuk pilihan aa secara rawak, ternyata tidak mungkin semua faktor perdana NN akan membahagi satu sebutan sahaja tanpa yang lain. Selain itu, selagi sesetengah faktor perdana NN membahagi sebutan pertama dan sesetengah membahagi sebutan kedua, kita akan dapat mencari faktor bukan trivial NN dengan mengira GCD dengan sebutan pertama.

Source: IBM Quantum docs — updated 2 Feb 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of approx. 26 Mac 2026