Algoritma Shor
Untuk modul Qiskit in Classrooms ini, pelajar perlu mempunyai persekitaran Python yang berfungsi dengan pakej berikut dipasang:
qiskitv2.1.0 atau lebih baharuqiskit-ibm-runtimev0.40.1 atau lebih baharuqiskit-aerv0.17.0 atau lebih baharuqiskit.visualizationnumpypylatexenc
Untuk menyediakan dan memasang pakej di atas, lihat panduan Pasang Qiskit. Untuk menjalankan kerja pada komputer kuantum sebenar, pelajar perlu membuat akaun dengan IBM Quantumยฎ dengan mengikuti langkah-langkah dalam panduan Sediakan akaun IBM Cloud anda.
Modul ini telah diuji dan menggunakan tiga saat masa QPU. Ini adalah anggaran sahaja. Penggunaan sebenar anda mungkin berbeza.
# Added by doQumentation โ required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Pengenalanโ
Pada awal 1990-an, terdapat keseronokan yang semakin meningkat tentang potensi komputer kuantum untuk menyelesaikan masalah yang sukar bagi komputer klasik. Beberapa saintis komputer berbakat telah mereka bentuk algoritma yang menunjukkan kekuatan pengkomputeran kuantum untuk beberapa masalah khusus yang direka khas, tetapi tiada seorang pun yang menemui satu "killer app" pengkomputeran kuantum yang pasti akan merevolusikan bidang ini. Itu berlaku sehingga 1994, apabila Peter Shor menghasilkan apa yang kini dikenali sebagai algoritma Shor untuk memfaktorkan nombor besar.
Sudah lama diketahui pada masa itu bahawa mencari faktor perdana nombor besar adalah sangat sukar bagi komputer klasik. Malah, protokol keselamatan internet bergantung pada kesukaran ini. Shor menemui cara untuk mencari faktor-faktor ini dengan lebih cekap secara eksponen dengan memindahkan beberapa langkah yang lebih mencabar kepada komputer kuantum teoritikal pada masa depan.
Dalam modul ini, kita akan meneroka algoritma Shor. Pertama, kita akan memberikan sedikit konteks lebih lanjut tentang algoritma ini, memformalkan masalah yang diselesaikannya dan menerangkan relevansinya kepada keselamatan siber. Seterusnya, kita akan memberikan pengenalan tentang matematik modular dan cara menggunakannya pada masalah pemfaktoran, menunjukkan bagaimana pemfaktoran boleh diturunkan kepada masalah lain yang dipanggil "pencarian peringkat." Kita akan menunjukkan bagaimana Jelmaan Fourier Kuantum dan Anggaran Fasa Kuantum yang kita pelajari dalam modul sebelumnya memainkan peranan, dan cara menggunakannya untuk menyelesaikan masalah pencarian peringkat.
Akhir sekali, kita akan menjalankan algoritma Shor pada komputer kuantum sebenar! Ingatlah, bagaimanapun, algoritma ini hanya akan benar-benar berguna apabila kita mempunyai komputer kuantum yang besar dan tahan kesalahan, yang masih beberapa tahun lagi. Jadi, kita hanya akan memfaktorkan nombor kecil untuk menunjukkan cara algoritma ini berfungsi.
Masalah pemfaktoranโ
Matlamat masalah pemfaktoran adalah untuk mencari faktor perdana suatu nombor . Untuk sesetengah nombor , ini agak mudah. Contohnya, jika adalah genap, salah satu faktor perdananya ialah 2. Jika adalah kuasa perdana, bermaksud untuk suatu nombor perdana , adalah juga agak mudah untuk mencari : kita hanya menganggarkan punca bagi dan mencari perdana berdekatan yang mungkin .
Walau bagaimanapun, komputer klasik menghadapi kesukaran apabila adalah ganjil dan bukan kuasa perdana. Inilah kes yang ditangani algoritma Shor. Algoritma ini mencari dua faktor dan supaya . Ia boleh digunakan secara rekursif sehingga semua faktor adalah perdana. Dalam bahagian seterusnya kita akan melihat bagaimana masalah ini ditangani.
Relevansi kepada keselamatan siberโ
Banyak skim kriptografi telah dibina berdasarkan hakikat bahawa memfaktorkan nombor besar adalah sukar, termasuk satu yang biasa digunakan hari ini, dipanggil RSA. Dalam RSA, kunci awam dicipta dengan mendarabkan dua nombor perdana besar bersama untuk mendapatkan . Kemudian, sesiapa sahaja boleh menggunakan kunci awam ini untuk menyulitkan data. Tetapi hanya seseorang yang mempunyai kunci peribadi, dan , boleh menyahsulit data tersebut.
Jika mudah difaktorkan, maka sesiapa pun boleh menentukan apakah dan dan memecahkan penyulitan. Tetapi ia tidak begitu. Ini adalah masalah yang terkenal sukar. Malah, faktor perdana bagi nombor yang dipanggil RSA1024, yang mempunyai 1024 digit binari dan 309 digit perpuluhan, masih belum ditemui, walaupun hadiah $100,000 ditawarkan untuk pemfaktorannya sejak 1991.
Penyelesaian Shorโ
Pada 1994, Peter Shor menyedari bahawa komputer kuantum boleh memfaktorkan nombor besar dengan lebih cekap secara eksponen berbanding komputer klasik. Wawasannya bergantung pada hubungan antara masalah pemfaktoran ini dan aritmetik modular. Kita akan melalui pengenalan ringkas tentang aritmetik modular, kemudian kita akan melihat bagaimana kita boleh menggunakannya untuk memfaktorkan .
Aritmetik modularโ
Aritmetik modular adalah sistem pengiraan yang bersifat kitaran, bermaksud walaupun pengiraan bermula seperti biasa, dengan integer 0, 1, 2, dan seterusnya, pada suatu ketika, selepas tempoh , pengiraan bermula semula. Mari lihat cara ini berfungsi dengan contoh. Katakan tempoh kita adalah 5. Kemudian, semasa kita mengira, di mana kita biasanya mencapai 5, kita sebaliknya memulakan semula pada 0:
Ini kerana dalam dunia "modulo-5", 5 bersamaan dengan 0. Kita katakan . Malah, semua gandaan 5 akan bersamaan dengan .
Semak pemahaman andaโ
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaiannya.
Gunakan aritmetik modular untuk menyelesaikan masalah berikut:
Kamu bertolak dalam perjalanan kereta api transcontinental yang panjang pada pukul 8 pagi. Perjalanan kereta api itu 60 jam lamanya. Pukul berapakah ketika kamu tiba?
Jawapan:
Tempohnya ialah 24, kerana ada 24 jam dalam sehari. Jadi, masalah ini boleh ditulis dalam aritmetik modular sebagai:
Jadi, kamu akan tiba di destinasi pada pukul 20:00, atau pukul 8 malam.
dan โ
Selalunya berguna untuk memperkenalkan dua set, dan . hanyalah set nombor yang wujud dalam dunia "modulo-". Contohnya, apabila kita mengira modulo-5, setnya ialah . Contoh lain: . Kita boleh melakukan penambahan dan pendaraban (modulo ) pada elemen dalam , dan hasil setiap operasi ini juga adalah elemen dalam , menjadikan objek matematik yang dipanggil gelanggang.
Terdapat subset khas yang amat menarik perhatian kita untuk algoritma Shor. Iaitu subset nombor dalam supaya pembahagi sepunya terbesar antara setiap elemen dan ialah 1, jadi setiap elemen adalah "ko-perdana" dengan . Jika kita mengambil set nombor ini bersama operasi pendaraban modular, maka ini membentuk objek matematik lain, yang dipanggil kumpulan. Kita menamakan kumpulan ini . Rupanya dengan (dan kumpulan terhingga secara umum), jika kita memilih mana-mana elemen , dan berulang kali mendarabkan dengan dirinya sendiri, kita akan sentiasa akhirnya mendapatkan nombor . Bilangan minimum kali seseorang perlu mendarabkan dengan dirinya sendiri untuk mendapatkan dipanggil peringkat bagi . Fakta ini akan sangat penting dalam perbincangan kita tentang cara memfaktorkan nombor di bawah.
Semak pemahaman andaโ
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaiannya.
Apakah ?
Jawapan:
Kita mengecualikan nombor berikut:
Apakah peringkat bagi setiap elemen dalam ?
Jawapan:
Peringkat adalah nombor terendah supaya bagi setiap elemen .
Perhatikan bahawa, walaupun kita dapat mencari peringkat nombor dalam , ini BUKAN tugas yang mudah secara umum, untuk yang lebih besar. Inilah inti masalah pemfaktoran dan sebab kita memerlukan komputer kuantum. Kita akan melihat mengapa semasa kita mengerjakan baki notebook ini.
Gunakan aritmetik modular pada masalah pemfaktoranโ
Kunci untuk mencari faktor dan supaya bergantung pada mencari suatu integer lain supaya
dan
Bagaimana mencari membantu kita mencari faktor dan ? Mari lalui hujah itu sekarang. Sejak , bermaksud . Dalam erti kata lain, adalah gandaan . Jadi, untuk suatu integer ,
Kita boleh memfaktorkan untuk mendapatkan:
Daripada andaian awal kita, kita tahu bahawa , jadi tidak membahagi secara sekata ke dalam atau . Jadi, dua faktor , iaitu dan , masing-masing mesti membahagi ke dalam dan . Sama ada adalah faktor dan adalah faktor , atau sebaliknya. Oleh itu, jika kita mengira pembahagi sepunya terbesar (GCD) antara dan kedua-dua dan , itu akan memberi kita faktor dan . Mengira GCD antara dua nombor adalah tugas yang mudah secara klasik yang boleh dilakukan, contohnya, menggunakan algoritma Euclid.
Semak pemahaman andaโ
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaiannya.
Mungkin sukar untuk memahami setiap langkah logik di atas, jadi cuba lakukan dengan contoh. Gunakan dan . Pertama, sahkan bahawa dan . Kemudian teruskan untuk mengesahkan setiap langkah. Akhir sekali, kira dan sahkan bahawa ia adalah faktor-faktor .
Jawapan:
, iaitu , jadi .
, yang tidak bersamaan dengan .
, yang tidak bersamaan dengan .
Sekarang, kita tahu bahawa untuk suatu integer . Ini disahkan apabila kita memasukkan dan : apabila .
Sekarang, kita perlu mengira dan .
Jadi, kita telah menemui faktor-faktor !
Algoritmaโ
Kini setelah kita melihat bagaimana mencari suatu integer supaya membantu kita memfaktorkan , kita boleh melalui algoritma Shor. Ia pada asasnya merupakan cara mencari :
- Pilih integer rawak Pilih integer rawak supaya .
- Kira secara klasik.
- Jika , kamu telah menemui faktor. Berhenti.
- Jika tidak, teruskan.
-
Cari peringkat bagi modulo Cari integer positif terkecil yang memenuhi .
-
Semak sama ada peringkatnya genap
- Jika adalah ganjil, kembali ke langkah 1 dan pilih baru.
- Jika adalah genap, teruskan ke langkah 4.
- Kira
- Semak bahawa dan .
- Jika , kembali ke langkah 1 dan pilih baru.
- Jika tidak, kira gcd untuk mengekstrak faktor:
Ini akan menjadi faktor bukan remeh bagi .
- Faktor secara rekursif jika perlu
- Jika dan/atau bukan perdana, gunakan algoritma ini secara rekursif untuk memfaktorkannya sepenuhnya.
- Apabila semua faktor adalah perdana, pemfaktoran selesai.
Berdasarkan prosedur ini, mungkin tidak jelas mengapa komputer kuantum diperlukan untuk menyelesaikan tugas ini. Ia perlu kerana langkah 2, mencari peringkat modulo , adalah masalah yang sangat sukar secara klasik. Kerumitannya berskala secara eksponen dalam nombor . Tetapi dengan komputer kuantum, kita hanya perlu menggunakan Anggaran Fasa Kuantum untuk menyelesaikannya. Langkah 4, mencari GCD dua integer, sebenarnya adalah sesuatu yang agak mudah dilakukan secara klasik. Jadi, satu-satunya langkah yang benar-benar memerlukan kuasa komputer kuantum adalah langkah pencarian peringkat. Kita katakan masalah pemfaktoran "diturunkan" kepada masalah pencarian peringkat.
Bahagian yang sukar: pencarian peringkatโ
Sekarang, kita akan melalui cara kita boleh menggunakan komputer kuantum dalam pencarian peringkat. Pertama, mari kita jelaskan apa yang kita maksudkan dengan "peringkat." Sudah tentu, saya sudah memberitahu anda apa maksud peringkat secara matematik: ia adalah integer bukan sifar pertama supaya Tetapi mari lihat sama ada kita boleh mendapatkan sedikit lebih intuisi untuk konsep ini.
Untuk yang cukup kecil, kita boleh menentukan peringkat hanya dengan mengira setiap kuasa , mengambil modulus bagi nombor itu, kemudian berhenti apabila kita menemui kuasa yang memenuhi . Itulah yang kita lakukan dengan contoh kita, , di atas. Mari lihat beberapa graf kuasa modular ini untuk beberapa nilai sampel dan :
Perasan sesuatu? Ini adalah fungsi berkala! Dan peringkat adalah sama dengan tempohnya! Jadi, pencarian peringkat bersamaan dengan pencarian tempoh.
Komputer kuantum sangat sesuai untuk mencari tempoh fungsi. Untuk ini, kita boleh menggunakan subrutin algoritma yang dipanggil Anggaran Fasa Kuantum. Kita membincangkan QPE dan hubungannya dengan Jelmaan Fourier Kuantum dalam modul sebelumnya. Untuk penyegaran terperinci, pergi ke modul QFT atau pelajaran John Watrous tentang Anggaran Fasa Kuantum dalam kursus Algoritma Kuantumnya. Kita akan melalui intipati prosedur sekarang:
Dalam Anggaran Fasa Kuantum (QPE), kita bermula dengan unitar dan eigenstate unitar tersebut . Kemudian, kita menggunakan QPE untuk menganggarkan nilai eigen yang bersesuaian, yang, kerana pengoperasinya adalah unitari, akan berbentuk . Jadi, mencari nilai eigen bersamaan dengan mencari nilai dalam fungsi berkala. Circuit kelihatan seperti ini:

di mana bilangan Qubit kawalan (Qubit teratas dalam rajah di atas) menentukan ketepatan anggaran.
Dalam algoritma Shor, kita menggunakan QPE pada pengoperasi unitari :
Di sini, merujuk kepada keadaan asas komputasi bagi daftar berbilang Qubit, di mana nilai binari Qubit sepadan dengan integer . Contohnya, jika dan , maka diwakili oleh keadaan asas empat Qubit , kerana empat Qubit diperlukan untuk mengekodkan nombor sehingga 15. (Jika konsep ini tidak dikenali, lihat modul Qiskit in classrooms pengantar untuk penyegaran tentang pengekodan binari keadaan kuantum.)
Sekarang, kita perlu mencari eigenstate bagi unitari ini. Jika kita bermula dalam keadaan , kita dapat melihat bahawa setiap penggunaan berturutan akan mendarabkan keadaan daftar kita dengan , dan selepas penggunaan kita akan tiba semula pada keadaan . Contohnya dengan dan :
Jadi superposisi keadaan dalam kitaran ini () dalam bentuk:
semuanya adalah eigenstate bagi . (Terdapat lebih banyak eigenstate daripada yang di atas sahaja. Tetapi kita hanya mengambil berat tentang yang berbentuk di atas.)
Semak pemahaman andaโ
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaiannya.
Cari eigenstate bagi unitari yang sepadan dengan dan .
Jawapan:
Jadi, peringkat . Eigenstate yang kita minati akan menjadi superposisi saksama semua keadaan yang dilalui di atas, dengan pelbagai fasa:
Katakan kita dapat memulakan keadaan Qubit kita ke dalam salah satu eigenstate ini (spoiler โ kita tidak boleh. Atau, sekurang-kurangnya tidak dengan mudah. Kita akan menerangkan mengapa dan apa yang boleh kita lakukan sebagai gantinya tidak lama lagi). Kemudian kita boleh menggunakan QPE untuk menganggarkan nilai eigen yang sepadan, di mana . Kemudian, kita akan dapat menentukan peringkat dengan persamaan mudah:
Tetapi ingat, saya berkata bahawa QPE menganggar โ ia tidak memberikan nilai tepat. Kita perlu anggaran yang cukup baik untuk membezakan antara dan . Lebih banyak Qubit kawalan yang kita miliki, lebih baik anggarannya. Dalam soalan di akhir pelajaran, anda akan diminta untuk menentukan minimum yang diperlukan untuk memfaktorkan nombor .
Sekarang, kita perlu menyelesaikan satu masalah. Semua penjelasan di atas tentang cara mencari bermula dengan menyediakan eigenstate . Tetapi kita tidak tahu cara melakukannya tanpa sudah mengetahui apa itu . Logiknya bersifat bulat. Kita memerlukan cara untuk menganggar nilai eigen tanpa memulakan eigenstate.
Daripada bermula dengan eigenstate , kita boleh menyediakan keadaan awal ke dalam keadaan -Qubit yang sepadan dengan dalam binari (iaitu, ). Walaupun keadaan ini sendiri jelas bukan eigenstate , ia adalah superposisi ke atas semua eigenstate :