Algoritma Shor
Untuk modul Qiskit in Classrooms ini, siswa harus memiliki lingkungan Python yang berfungsi dengan paket-paket berikut terinstal:
qiskitv2.1.0 atau lebih baruqiskit-ibm-runtimev0.40.1 atau lebih baruqiskit-aerv0.17.0 atau lebih baruqiskit.visualizationnumpypylatexenc
Untuk mengatur dan menginstal paket-paket di atas, lihat panduan Instal Qiskit. Untuk menjalankan job di komputer kuantum sungguhan, siswa perlu membuat akun IBM Quantumยฎ dengan mengikuti langkah-langkah di panduan Siapkan akun IBM Cloud-mu.
Modul ini telah diuji dan menggunakan tiga detik waktu QPU. Ini hanya perkiraan. Penggunaan aktualmu bisa berbeda.
# 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'
Pengantarโ
Di awal tahun 1990-an, ada kegembiraan yang berkembang seputar potensi komputer kuantum untuk memecahkan masalah yang sulit bagi komputer klasik. Beberapa ilmuwan komputer berbakat telah merancang algoritma yang menunjukkan kekuatan komputasi kuantum untuk beberapa masalah niche yang dibuat-buat, tapi belum ada yang menemukan satu "killer app" komputasi kuantum yang pasti akan merevolusi bidang ini. Itu berlangsung sampai tahun 1994, ketika Peter Shor menemukan apa yang sekarang disebut algoritma Shor untuk memfaktorkan bilangan besar.
Saat itu sudah diketahui bahwa menemukan faktor prima dari bilangan besar sangat sulit bagi komputer klasik. Bahkan, protokol keamanan internet mengandalkan kesulitan ini. Shor menemukan cara untuk menemukan faktor-faktor ini secara eksponensial lebih efisien dengan mengalihkan beberapa langkah yang lebih menantang ke komputer kuantum teoritis di masa depan.
Dalam modul ini, kita akan mengeksplorasi algoritma Shor. Pertama, kita akan memberikan sedikit lebih banyak konteks untuk algoritma ini, memformalkan masalah yang diselesaikannya dan menjelaskan relevansinya terhadap keamanan siber. Selanjutnya, kita akan memberikan pengantar tentang matematika modular dan cara menerapkannya pada masalah pemfaktoran, menunjukkan bagaimana pemfaktoran mereduksi ke masalah lain yang disebut "pencarian orde." Kita akan menunjukkan bagaimana Quantum Fourier Transform dan Quantum Phase Estimation yang telah kita pelajari di modul sebelumnya berperan, dan cara menggunakannya untuk memecahkan masalah pencarian orde.
Akhirnya, kita akan menjalankan algoritma Shor di komputer kuantum sungguhan! Tapi ingat, algoritma ini benar-benar hanya akan berguna ketika kita memiliki komputer kuantum yang besar dan toleran terhadap kesalahan, yang masih beberapa tahun lagi. Jadi, kita hanya akan memfaktorkan bilangan kecil untuk mendemonstrasikan cara kerja algoritma ini.
Masalah pemfaktoranโ
Tujuan masalah pemfaktoran adalah menemukan faktor prima dari sebuah bilangan . Untuk beberapa bilangan , ini cukup mudah. Misalnya, jika genap, salah satu faktor primanya adalah 2. Jika adalah perpangkatan prima, artinya untuk suatu bilangan prima , juga cukup mudah menemukan : kita hanya perlu mendekati akar ke- dari dan mencari bilangan prima terdekat yang bisa menjadi .
Di mana komputer klasik kesulitan, yaitu ketika ganjil dan bukan perpangkatan prima. Inilah kasus yang ditangani algoritma Shor. Algoritma ini menemukan dua faktor dan sedemikian sehingga . Algoritma ini bisa diterapkan secara rekursif sampai semua faktor adalah prima. Di bagian berikutnya kita akan melihat bagaimana masalah ini ditangani.
Relevansi terhadap keamanan siberโ
Banyak skema kriptografi dibangun berdasarkan fakta bahwa memfaktorkan bilangan besar itu sulit, termasuk salah satu yang umum digunakan saat ini, disebut RSA. Dalam RSA, kunci publik dibuat dengan mengalikan dua bilangan prima besar untuk mendapatkan . Kemudian, siapa pun bisa menggunakan kunci publik ini untuk mengenkripsi data. Tapi hanya orang yang memiliki kunci privat, dan , yang bisa mendekripsi data itu.
Jika mudah difaktorkan, maka siapa pun akan bisa menentukan apa itu dan dan membobol enkripsinya. Tapi tidak seperti itu. Ini adalah masalah yang terkenal sulit. Bahkan, faktor prima dari sebuah bilangan yang disebut RSA1024, yang panjangnya 1024 digit biner dan 309 digit desimal, belum ditemukan sampai saat ini, meskipun hadiah sebesar $100.000 sudah ditawarkan untuk pemfaktorannya sejak tahun 1991.
Solusi Shorโ
Pada tahun 1994, Peter Shor menyadari bahwa komputer kuantum bisa memfaktorkan bilangan besar secara eksponensial lebih efisien daripada komputer klasik. Wawasannya mengandalkan hubungan antara masalah pemfaktoran ini dan aritmatika modular. Kita akan membahas pengantar singkat tentang aritmatika modular, lalu kita akan melihat bagaimana kita bisa menggunakannya untuk memfaktorkan .
Aritmatika modularโ
Aritmatika modular adalah sistem penghitungan yang bersifat siklik, artinya meski penghitungan dimulai dengan cara biasa, dengan bilangan bulat 0, 1, 2, dst., pada titik tertentu, setelah periode , penghitungan dimulai lagi dari awal. Mari kita lihat cara kerjanya dengan contoh. Katakanlah periode kita adalah 5. Kemudian, saat kita menghitung, di mana kita biasanya mencapai 5, kita malah mulai lagi dari 0:
Ini karena dalam dunia "modulo-5", 5 setara dengan 0. Kita katakan bahwa . Bahkan, semua kelipatan 5 akan setara dengan .
Cek pemahamanโ
Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.
Gunakan aritmatika modular untuk menyelesaikan masalah berikut:
Kamu berangkat naik kereta lintas benua yang panjang pada pukul 8 pagi. Perjalanan kereta berlangsung 60 jam. Pukul berapa saat kamu tiba?
Jawaban:
Periodenya adalah 24, karena ada 24 jam dalam sehari. Jadi, masalah ini bisa ditulis dalam aritmatika modular sebagai:
Jadi, kamu akan tiba di tujuan pada pukul 20:00, atau 8 malam.
dan โ
Seringkali berguna untuk memperkenalkan dua himpunan, dan . adalah himpunan bilangan yang ada di dunia "modulo-". Misalnya, saat kita menghitung modulo-5, himpunannya adalah . Contoh lain: . Kita bisa melakukan penjumlahan dan perkalian (modulo ) pada elemen-elemen di , dan hasil setiap operasi ini juga merupakan elemen di , menjadikan sebuah objek matematika yang disebut ring.
Ada subset khusus dari yang sangat menarik bagi kita untuk algoritma Shor. Yaitu subset dari bilangan-bilangan di sedemikian sehingga pembagi persekutuan terbesar antara setiap elemen dan adalah 1, sehingga setiap elemen "ko-prima" dengan . Jika kita mengambil himpunan bilangan-bilangan ini bersama operasi perkalian modular, maka ini membentuk objek matematika lain, yang disebut grup. Kita sebut grup ini . Ternyata dengan (dan grup hingga pada umumnya), jika kita memilih elemen mana pun , dan berulang kali mengalikan dengan dirinya sendiri, kita pada akhirnya selalu akan mendapatkan angka . Jumlah minimum kali seseorang harus mengalikan dengan dirinya sendiri untuk mendapatkan disebut orde dari . Fakta ini akan sangat penting untuk pembahasan kita tentang cara memfaktorkan bilangan di bawah ini.
Cek pemahamanโ
Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.
Apa itu ?
Jawaban:
Kita mengecualikan bilangan-bilangan berikut:
Apa orde dari setiap elemen di ?
Jawaban:
Orde adalah bilangan terkecil sedemikian sehingga untuk setiap elemen .
Perhatikan bahwa, meski kita bisa menemukan orde dari bilangan-bilangan di , ini BUKAN tugas yang mudah secara umum, untuk yang lebih besar. Ini adalah inti dari masalah pemfaktoran dan mengapa kita membutuhkan komputer kuantum. Kita akan melihat alasannya saat kita mengerjakan sisa notebook ini.
Terapkan aritmatika modular pada masalah pemfaktoranโ
Kunci untuk menemukan faktor dan sedemikian sehingga bergantung pada penemuan bilangan bulat lain sedemikian sehingga
dan
Bagaimana menemukan membantu kita menemukan faktor dan ? Mari kita telusuri argumennya sekarang. Karena , itu berarti . Dengan kata lain, adalah kelipatan dari . Jadi, untuk suatu bilangan bulat ,
Kita bisa memfaktorkan untuk mendapatkan:
Dari asumsi awal kita tahu bahwa , sehingga tidak habis membagi maupun . Jadi, dua faktor dari , dan , masing-masing harus membagi dan . Entah adalah faktor dari dan adalah faktor dari , atau sebaliknya. Oleh karena itu, jika kita menghitung pembagi persekutuan terbesar (GCD) antara dan keduanya serta , itu akan memberi kita faktor dan . Menghitung GCD antara dua bilangan adalah tugas yang mudah secara klasik yang bisa dilakukan, misalnya, menggunakan algoritma Euclid.
Cek pemahamanโ
Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.
Mungkin sulit untuk memahami setiap langkah logika di atas, jadi coba kerjakan dengan contoh. Gunakan dan . Pertama, verifikasi bahwa dan . Kemudian lanjutkan untuk memverifikasi setiap langkah. Akhirnya, hitung dan verifikasi bahwa mereka adalah faktor dari .
Jawaban:
, yang merupakan , sehingga .
, yang tidak setara dengan .
, yang tidak setara dengan .
Sekarang, kita tahu bahwa untuk suatu bilangan bulat . Ini diverifikasi saat kita memasukkan dan : ketika .
Sekarang, kita perlu menghitung dan .
Jadi, kita telah menemukan faktor-faktor dari !
Algoritmaโ
Sekarang kita sudah melihat bagaimana menemukan bilangan bulat sedemikian sehingga membantu kita memfaktorkan , kita bisa menelusuri algoritma Shor. Intinya berpusat pada menemukan :
- Pilih bilangan bulat acak Pilih bilangan bulat acak sedemikian sehingga .
- Hitung secara klasik.
- Jika , kamu sudah menemukan faktornya. Berhenti.
- Jika tidak, lanjutkan.
-
Temukan orde dari modulo Temukan bilangan bulat positif terkecil yang memenuhi .
-
Periksa apakah orde itu genap
- Jika ganjil, kembali ke langkah 1 dan pilih baru.
- Jika genap, lanjutkan ke langkah 4.
- Hitung
- Periksa bahwa dan .
- Jika , kembali ke langkah 1 dan pilih baru.
- Jika tidak, hitung gcd untuk mengekstrak faktor-faktornya:
Ini akan menjadi faktor non-trivial dari .
- Faktorkan secara rekursif jika diperlukan
- Jika dan/atau bukan prima, terapkan algoritma secara rekursif untuk memfaktorkannya sepenuhnya.
- Setelah semua faktor adalah prima, pemfaktoran selesai.
Berdasarkan prosedur ini, mungkin tidak jelas mengapa komputer kuantum diperlukan untuk menyelesaikan tugas ini. Ini diperlukan karena langkah 2, menemukan orde modulo , secara klasik merupakan masalah yang sangat sulit. Kompleksitasnya bertambah secara eksponensial terhadap bilangan . Tapi dengan komputer kuantum, kita hanya perlu memanfaatkan Quantum Phase Estimation untuk menyelesaikannya. Langkah 4, menemukan GCD dari dua bilangan bulat, sebenarnya cukup mudah dilakukan secara klasik. Jadi, satu-satunya langkah yang benar-benar membutuhkan kekuatan komputer kuantum adalah langkah pencarian orde. Kita katakan bahwa masalah pemfaktoran "mereduksi" ke masalah pencarian orde.
Bagian yang sulit: pencarian ordeโ
Sekarang, kita akan membahas bagaimana kita bisa menggunakan komputer kuantum dalam pencarian orde. Pertama, mari kita perjelas apa yang kita maksud dengan "orde." Tentu saja, aku sudah memberitahumu apa arti orde secara matematis: ini adalah bilangan bulat non-nol pertama sedemikian sehingga Tapi mari kita lihat apakah kita bisa mendapatkan sedikit lebih banyak intuisi untuk konsep ini.
Untuk yang cukup kecil, kita bisa menentukan orde hanya dengan menghitung setiap perpangkatan dari , mengambil modulus dari bilangan itu, lalu berhenti saat kita menemukan pangkat yang memenuhi . Itulah yang kita lakukan dengan contoh kita, , di atas. Mari kita lihat beberapa grafik dari perpangkatan modular ini untuk beberapa nilai sampel dari dan :
Perhatikan sesuatu? Ini adalah fungsi periodik! Dan orde sama dengan periodenya! Jadi, pencarian orde setara dengan pencarian periode.
Komputer kuantum sangat cocok untuk menemukan periode dari fungsi. Untuk ini, kita bisa menggunakan subrutin algoritma yang disebut Quantum Phase Estimation. Kita membahas QPE dan hubungannya dengan Quantum Fourier Transform di modul sebelumnya. Untuk penyegaran yang lebih detail, kunjungi modul QFT atau pelajaran John Watrous tentang Quantum Phase Estimation di kursus Algoritma Kuantum miliknya. Kita akan menelusuri inti prosedurnya sekarang:
Dalam Quantum Phase Estimation (QPE), kita mulai dengan unitary dan eigenstate dari unitary tersebut . Kemudian, kita menggunakan QPE untuk mendekati nilai eigennya yang sesuai, yang, karena operatornya adalah unitary, akan berbentuk . Jadi, menemukan nilai eigen setara dengan menemukan nilai dalam fungsi periodik. Circuit-nya terlihat seperti ini:

di mana jumlah Qubit kontrol ( Qubit teratas dalam gambar di atas) menentukan presisi perkiraan.
Dalam algoritma Shor, kita menggunakan QPE pada operator unitary :
Di sini, menunjukkan computational basis state dari register multi-Qubit, di mana nilai biner dari Qubit-Qubit tersebut sesuai dengan bilangan bulat . Misalnya, jika dan , maka direpresentasikan oleh basis state empat-Qubit , karena empat Qubit diperlukan untuk mengkodekan bilangan hingga 15. (Jika konsep ini belum familiar, lihat modul pengantar Qiskit in classrooms untuk penyegaran tentang pengkodean biner status kuantum.)
Sekarang, kita perlu mencari tahu eigenstate dari unitary ini. Jika kita mulai dalam keadaan , kita bisa melihat bahwa setiap penerapan yang berturutan akan mengalikan keadaan register kita dengan , dan setelah penerapan kita akan tiba di keadaan lagi. Misalnya dengan dan :
Jadi superposisi dari keadaan dalam siklus ini () berbentuk:
semuanya adalah eigenstate dari . (Ada lebih banyak eigenstate selain ini. Tapi kita hanya peduli dengan yang berbentuk di atas.)
Cek pemahamanโ
Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.
Temukan eigenstate dari unitary yang sesuai dengan dan .
Jawaban:
Jadi, orde . Eigenstate yang kita minati akan berupa superposisi merata dari semua keadaan yang telah disiklus di atas, dengan berbagai fase:
Katakanlah kita bisa menginisialisasi keadaan Qubit kita ke salah satu eigenstate ini (spoiler โ kita tidak bisa. Atau, setidaknya tidak mudah. Kita akan menjelaskan alasannya dan apa yang bisa kita lakukan sebagai gantinya sebentar lagi). Kemudian kita bisa menggunakan QPE untuk memperkirakan nilai eigen yang sesuai, di mana . Kemudian, kita akan bisa menentukan orde dengan persamaan sederhana:
Tapi ingat, aku bilang bahwa QPE memperkirakan โ itu tidak memberi kita nilai yang tepat. Kita perlu perkiraan yang cukup baik untuk membedakan antara dan . Semakin banyak Qubit kontrol yang kita miliki, semakin baik perkiraannya. Dalam soal-soal di akhir pelajaran, kamu akan diminta untuk menentukan minimum yang diperlukan untuk memfaktorkan suatu bilangan .
Sekarang, kita harus menyelesaikan sebuah masalah. Semua penjelasan di atas tentang cara menemukan dimulai dengan menyiapkan eigenstate . Tapi kita tidak tahu cara melakukannya tanpa sudah mengetahui . Logikanya melingkar. Kita membutuhkan cara untuk memperkirakan nilai eigen tanpa menginisialisasi eigenstate.
Alih-alih memulai dengan eigenstate dari , kita bisa menyiapkan keadaan awal ke keadaan -Qubit yang sesuai dengan dalam biner (yaitu, ). Meskipun keadaan ini jelas bukan eigenstate dari , ini adalah superposisi atas semua eigenstate :
Cek pemahamanโ
Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.
Verifikasi bahwa setara dengan superposisi atas eigenstate yang kamu temukan untuk dan dalam pertanyaan cek sebelumnya.
Jawaban:
Empat eigenstate tersebut adalah:
Jadi,