Lumaktaw sa pangunahing nilalaman

Algoritmo ni Shor

Para sa modyul na ito ng Qiskit in Classrooms, kailangang may gumaganang Python environment ang mga estudyante na may naka-install na mga sumusunod na pakete:

  • qiskit v2.1.0 o mas bago
  • qiskit-ibm-runtime v0.40.1 o mas bago
  • qiskit-aer v0.17.0 o mas bago
  • qiskit.visualization
  • numpy
  • pylatexenc

Para ma-set up at ma-install ang mga paketeng nakalista sa itaas, tingnan ang gabay na Install Qiskit. Para makapag-run ng mga job sa tunay na quantum computer, kailangang mag-set up ng account sa IBM Quantumยฎ ang mga estudyante sa pamamagitan ng mga hakbang sa gabay na Set up your IBM Cloud account.

Ang modyul na ito ay nasubok at gumamit ng tatlong segundo ng QPU time. Tantiya lamang ito. Maaaring mag-iba ang iyong aktwal na paggamit.

# 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'

Panimulaโ€‹

Noong unang bahagi ng dekada 1990, lumakas ang sigasig sa potensyal ng mga quantum computer na malutas ang mga problemang mahirap para sa mga klasikal na computer. Ilang bihasang computer scientist ang nakalikha ng mga algoritmo na nagpapakita ng kapangyarihan ng quantum computing para sa ilang niche at naka-construct na mga problema, ngunit walang nakahanap ng isang "killer app" ng quantum computing na tiyak na mag-rerebolusiyon sa larangan. Iyon ay, hanggang 1994, nang matuklasan ni Peter Shor ang tinatawag na ngayon na algoritmo ni Shor para sa pag-factor ng malalaking numero.

Kilala na sa panahong iyon na ang paghanap ng mga prime factor ng isang malaking numero ay napakahirap para sa isang klasikal na computer. Sa katunayan, umaasa sa kahirapang ito ang mga internet security protocol. Nakahanap si Shor ng paraan upang mahanap ang mga factor na ito nang mas mahusay nang exponential sa pamamagitan ng pagpasa ng ilang mas mahirap na hakbang sa isang teoretikal, hinaharap na quantum computer.

Sa modyul na ito, tatalakayin natin ang algoritmo ni Shor. Una, magbibigay tayo ng kaunting konteksto sa algoritmo, pormal na ititakda ang problemang niresolba nito at ipapaliwanag ang kaugnayan sa cyber security. Susunod, magbibigay tayo ng maikling pagpapakilala sa modular mathematics at kung paano ito ilapat sa problema ng pag-factor, na nagpapakita kung paano nababawas ang pag-factor sa isa pang problema na tinatawag na "order-finding." Ipapakita natin kung paano gumaganap ang Quantum Fourier Transform at Quantum Phase Estimation na natutunan natin sa nakaraang modyul, at kung paano gamitin ang mga ito para malutas ang problema ng order-finding.

Sa wakas, magpapatakbo tayo ng algoritmo ni Shor sa tunay na quantum computer! Tandaan, gayunpaman, na ang algorithm na ito ay talagang magiging kapaki-pakinabang lamang kapag mayroon tayong malaki at fault-tolerant na quantum computer, na ilang taon pa ang layo. Kaya, mag-fa-factor lang tayo ng maliit na numero para ipakita kung paano gumagana ang algoritmo.

Ang problema sa pag-factorโ€‹

Ang layunin ng problema sa pag-factor ay hanapin ang mga prime factor ng isang numero NN. Para sa ilang numero NN, medyo madali ito. Halimbawa, kung ang NN ay pare-pareho, ang isa sa mga prime factor nito ay magiging 2. Kung ang NN ay isang prime power, ibig sabihin N=pkN=p^k para sa ilang prime number pp, medyo madali ring hanapin ang pp: tinatantya lang natin ang kthk^{\text{th}} root ng NN at naghahanap ng malapit na mga prime na maaaring maging pp.

Kung saan nahihirapan ang mga klasikal na computer, gayunpaman, ay kapag ang NN ay kakaibang numero at hindi isang prime power. Ito ang kaso na tinutugunan ng algoritmo ni Shor. Nakakahanap ang algoritmo ng dalawang factor pp at qq kung saan N=pqN=pq. Maaari itong ilapat nang recursive hanggang lahat ng factor ay prime na. Sa mga susunod na seksyon, makikita natin kung paano tinataklasan ang problemang ito.

Kaugnayan sa cyber securityโ€‹

Maraming cryptographic scheme ang itinayo batay sa katotohanan na mahirap i-factor ang malalaking numero, kabilang ang isa na karaniwang ginagamit ngayon, na tinatawag na RSA. Sa RSA, nililikha ang isang public key sa pamamagitan ng pagpaparami ng dalawang malaking prime number para makuha ang N=pโ‹…qN = p\cdot q. Pagkatapos, kahit sino ay maaaring gumamit ng public key na ito para i-encrypt ang data. Ngunit tanging ang may hawak ng private key, pp at qq, ang makaka-decrypt ng data na iyon.

Kung madaling i-factor ang NN, kahit sino ay makakatukoy kung ano ang pp at qq at mababasag ang encryption. Ngunit hindi ganoon kadali. Ito ay isang kilalang mahirap na problema. Sa katunayan, ang mga prime factor ng isang numero na tinatawag na RSA1024, na may 1024 binary digit at 309 decimal digit ang haba, ay hindi pa natutuklasan, sa kabila ng $100,000 na premyong inaalok para sa pag-factor nito noong 1991.

Solusyon ni Shorโ€‹

Noong 1994, napagtanto ni Peter Shor na ang isang quantum computer ay maaaring mag-factor ng malaking numero nang mas mahusay nang exponential kaysa sa isang klasikal na computer. Ang kanyang pananaw ay umaasa sa relasyon sa pagitan ng problemang ito sa pag-factor at modular arithmetic. Dadaan tayo sa maikling pagpapakilala sa modular arithmetic, at pagkatapos ay makikita natin kung paano natin ito magagamit para i-factor ang NN.

Modular arithmeticโ€‹

Ang modular arithmetic ay isang sistema ng pagbibilang na cyclic, ibig sabihin habang nagsisimula ang pagbibilang sa karaniwang paraan, gamit ang mga integer na 0, 1, 2, atbp., sa isang punto, pagkatapos ng isang panahon NN, nagsisimulang muli ang pagbibilang. Tingnan natin kung paano ito gumagana gamit ang isang halimbawa. Sabihin nating ang ating panahon ay 5. Pagkatapos, habang nagbibilang tayo, kung saan karaniwan ay maaabot natin ang 5, sa halip ay nagsisimula tayong muli sa 0:

0,1,2,3,4,0,1,2,3,4,0,1,2,...0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, ...

Ito ay dahil sa "modulo-5" na mundo, ang 5 ay katumbas ng 0. Sinasabi natin na 5โ€Šmodโ€Š5ย =05\bmod 5 \ = 0. Sa katunayan, lahat ng multiple ng 5 ay magiging katumbas ng 0โ€Šmodโ€Š50\bmod 5.

Suriin ang iyong pag-unawaโ€‹

Basahin ang mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para ihayag ang solusyon.

Gamitin ang modular arithmetic para malutas ang sumusunod na problema:

Umalis ka sa isang mahabang transcontinental na biyahe sa tren nang 8 AM. Ang biyahe sa tren ay 60 oras ang haba. Anong oras na kapag dumating ka?

Sagot:

Ang panahon ay 24, dahil may 24 oras sa isang araw. Kaya, ang problemang ito ay maaaring isulat sa modular arithmetic bilang:

(8+60)mod(24)=20(8+60)\text{mod}(24) = 20

Kaya, darating ka sa iyong destinasyon nang 20:00, o 8 PM.

ZN\mathbb{Z}_N at ZNโˆ—\mathbb{Z}_N^*โ€‹

Kapaki-pakinabang na ipakilala ang dalawang set, ZN\mathbb{Z}_N at ZNโˆ—\mathbb{Z}_N^*. Ang ZN\mathbb{Z}_N ay simpleng ang set ng mga numerong umiiral sa isang "modulo-NN" na mundo. Halimbawa, nang nagbibilang tayo ng modulo-5, ang set ay magiging Z5={0,1,2,3,4}\mathbb{Z}_5=\{0,1,2,3,4\}. Isa pang halimbawa: Z15={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}\mathbb{Z}_{15} = \{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14\}. Maaari tayong magsagawa ng karagdagan at pagpaparami (modulo NN) sa mga elementong nasa ZN\mathbb{Z}_N, at ang resulta ng bawat isa sa mga operasyong ito ay isang elemento rin sa ZN\mathbb{Z}_N, na ginagawang ring โ€” isang mathematical na bagay โ€” ang ZN\mathbb{Z}_N.

May espesyal na subset ng ZN\mathbb{Z}_N na partikular na interesado sa atin para sa algoritmo ni Shor. Iyon ay ang subset ng mga numero sa ZN\mathbb{Z}_N kung saan ang greatest common divisor sa pagitan ng bawat elemento at ng NN ay 1, kaya bawat elemento ay "co-prime" sa NN. Kung kukuha tayo ng set ng mga numerong ito kasama ang modular multiplication operation, nabubuo nito ang isa pang mathematical na bagay, na tinatawag na group. Tinatawag nating ZNโˆ—\mathbb{Z}_N^* ang group na ito. Lumalabas na sa ZNโˆ—\mathbb{Z}_N^* (at sa mga finite group sa pangkalahatan), kung pipili tayo ng anumang elemento aโˆˆZNโˆ—a \in \mathbb{Z}_N^* at paulit-ulit na pararamihin ang aa sa sarili nito, palagi tayong makakarating sa numerong 11 sa huli. Ang pinakamaliit na bilang ng beses na kailangang pararamihin ang aa sa sarili nito para makuha ang 11 ay tinatawag na order ng aa. Ang katotohanang ito ay magiging napakahalagang bahagi ng ating talakayan sa kung paano i-factor ang mga numero sa ibaba.

Suriin ang iyong pag-unawaโ€‹

Basahin ang mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para ihayag ang solusyon.

Ano ang Z15โˆ—\mathbb{Z}_{15}^*?

Sagot:

Z15โˆ—={1,2,4,7,8,11,13,14}\mathbb{Z}_{15}^* = \{1,2,4,7,8,11,13,14\}

Ibinukod natin ang mga sumusunod na numero:

3:GCD(3,15)=35:GCD(5,15)=56:GCD(6,15)=39:GCD(9,15)=310:GCD(10,15)=512:GCD(12,15)=3\begin{aligned} 3: GCD(3,15)=3 \\ 5: GCD(5,15)=5 \\ 6: GCD(6,15)=3 \\ 9: GCD(9,15)=3 \\ 10: GCD(10,15)=5 \\ 12: GCD(12,15)=3 \\ \end{aligned}

Ano ang order ng bawat isa sa mga elemento sa Z15โˆ—\mathbb{Z}_{15}^*?

Sagot:

Ang order na rr ay ang pinakamababang numero kung saan armod(15)=1a^r\text{mod}(15)=1 para sa bawat elemento aa.

11mod(15)=1,r=124mod(15)=1,r=442mod(15)=1,r=274mod(15)=1,r=484mod(15)=1,r=4112mod(15)=1,r=2134mod(15)=1,r=4142mod(15)=1,r=2\begin{aligned} 1^1\text{mod}(15) = 1, r=1 \\ 2^4\text{mod}(15) = 1, r=4 \\ 4^2\text{mod}(15) = 1, r=2 \\ 7^4\text{mod}(15) = 1, r=4 \\ 8^4\text{mod}(15) = 1, r=4 \\ 11^2\text{mod}(15) = 1, r=2 \\ 13^4\text{mod}(15) = 1, r=4 \\ 14^2\text{mod}(15) = 1, r=2 \\ \end{aligned}

Tandaan na, habang nagawa nating hanapin ang order ng mga numero sa Z15โˆ—\mathbb{Z}_{15}^*, ito ay HINDI madaling gawain sa pangkalahatan, para sa mas malalaking NN. Ito ang pangunahing punto ng problema sa pag-factor at kung bakit kailangan natin ng quantum computer. Makikita natin kung bakit habang tinatayo natin ang natitirang bahagi ng notebook.

Ilapat ang modular arithmetic sa problema ng pag-factorโ€‹

Ang susi sa paghanap ng mga factor pp at qq kung saan N=pqN=pq ay ang paghanap ng ilang iba pang integer xx kung saan

x2โ‰ก1โ€Šmodโ€ŠNx^2 \equiv 1 \bmod N at xโ‰กฬธยฑ1โ€Šmodโ€ŠN.x \not\equiv \pm 1 \bmod N.

Paano nakakatulong ang paghanap ng xx para mahanap ang mga factor pp at qq? Dumaan tayo sa argumento ngayon. Dahil x2โ‰ก1โ€Šmodโ€ŠNx^2 \equiv 1 \bmod N, ibig sabihin x2โˆ’1โ‰ก0โ€Šmodโ€ŠNx^2 - 1 \equiv 0 \bmod N . Sa ibang salita, ang x2โˆ’1x^2 - 1 ay multiple ng NN. Kaya, para sa ilang integer ll,

x2โˆ’1=lNx^2 - 1 = l N

Maaari nating i-factor ang x2โˆ’1x^2 - 1 para makuha:

(x+1)(xโˆ’1)=lN(x+1)(x-1) = l N

Mula sa ating mga unang pagpapalagay, alam natin na xโ‰กฬธยฑ1โ€Šmodโ€ŠNx \not\equiv \pm 1 \bmod N, kaya ang NN ay hindi nahahati nang pantay sa alinman sa x+1x+1 o xโˆ’1x-1. Kaya, ang dalawang factor ng NN, ang pp at qq, ay dapat na bawat isa ay hahatiin sa xโˆ’1x-1 at x+1x+1. Ang pp ay isang factor ng xโˆ’1x-1 at ang qq ay isang factor ng x+1x+1, o vice versa. Samakatuwid, kung kukuwentahin natin ang greatest common divisors (GCDs) sa pagitan ng NN at parehong xโˆ’1x-1 at x+1x+1, mabibigyan tayo ng mga factor na pp at qq. Ang pagkalkula ng GCD sa pagitan ng dalawang numero ay isang klasikal na madaling gawain na maaaring magawa, halimbawa, gamit ang algoritmo ni Euclid.

Suriin ang iyong pag-unawaโ€‹

Basahin ang mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para ihayag ang solusyon.

Maaaring mahirap maunawaan ang bawat hakbang ng lohika sa itaas, kaya subukang dumaan dito gamit ang isang halimbawa. Gamitin ang N=15N=15 at x=11x=11. Una, i-verify na x2โ‰ก1mod(N)x^2 \equiv 1 \text{mod}(N) at xโ‰กฬธยฑ1โ€Šmodโ€ŠNx \not\equiv \pm 1 \bmod N. Pagkatapos ay magpatuloy na i-verify ang bawat hakbang. Sa wakas, kalkulahin ang GCD(11ยฑ1,15)\text{GCD}(11\pm1,15) at i-verify na ang mga ito ay mga factor ng 1515.

Sagot:

112=12111^2 = 121, na siyang 15โˆ—8+115*8 + 1, kaya 112โ€Šmodโ€Š15=111^2\bmod 15 = 1. โœ“\checkmark

11โˆ’1=10 11 - 1 = 10, na hindi katumbas ng 0โ€Šmodโ€Š150\bmod 15. โœ“\checkmark

11+1=12 11 + 1 = 12, na hindi katumbas ng 0โ€Šmodโ€Š150\bmod 15. โœ“\checkmark

Ngayon, alam nating (x+1)(xโˆ’1)=lN(x+1)(x-1) = l N para sa ilang integer ll. Ito ay na-verify kapag sinalin natin ang xx at NN: (12)(10)=l15(12)(10) = l 15 kapag l=8l = 8. โœ“\checkmark

Ngayon, kailangan nating kalkulahin ang GCD(12,15)\text{GCD}(12,15) at GCD(10,15)\text{GCD}(10,15).

GCD(12,15)=3GCD(10,15)=5\begin{aligned} \text{GCD}(12,15) = 3 \\ \text{GCD}(10,15) = 5 \end{aligned}

Kaya, nahanap natin ang mga factor ng 1515!

Ang algoritmoโ€‹

Ngayon na nakita natin kung paano nakakatulong ang paghanap ng ilang integer xx kung saan x2โ‰ก1โ€Šmodโ€ŠNx^2 \equiv 1\bmod N para i-factor ang NN, maaari na nating dumaan sa algoritmo ni Shor. Essentially, bumababa ito sa paghanap ng xx:

  1. Pumili ng random na integer Pumili ng random na integer aa kung saan 1<a<N1 < a < N.
  • Kalkulahin ang GCD(a,N)\text{GCD}(a, N) nang klasikal.
    • Kung ang GCD(a,N)>1\text{GCD}(a, N) > 1, nahanap na nito ang isang factor. Huminto.
    • Kung hindi, magpatuloy.
  1. Hanapin ang order rr ng aa modulo NN Hanapin ang pinakamaliit na positibong integer rr na nagbibigay-kasiyahan sa arโ‰ก1(modN)a^r \equiv 1 \pmod N.

  2. Suriin kung pare-pareho ang order

  • Kung ang rr ay kakaibang numero, bumalik sa hakbang 1 at pumili ng bagong aa.
  • Kung ang rr ay pare-pareho, magpatuloy sa hakbang 4.
  1. Kalkulahin ang x=ar/2โ€Šmodโ€ŠNx = a^{r/2} \bmod N
  • Suriin na xโ‰กฬธ1(modN)x \not\equiv 1 \pmod N at xโ‰กฬธโˆ’1(modN)x \not\equiv -1 \pmod N.
    • Kung xโ‰กยฑ1(modN)x \equiv \pm 1 \pmod N, bumalik sa hakbang 1 at pumili ng bagong aa.
  • Kung hindi, kalkulahin ang mga gcd para makuha ang mga factor:
p=GCD(xโˆ’1,N),q=GCD(x+1,N)p = \text{GCD}(x-1, N), \quad q = \text{GCD}(x+1, N)

Ang mga ito ay magiging hindi-trivial na mga factor ng NN.

  1. I-factor nang recursive kung kinakailangan
  • Kung ang pp at/o qq ay hindi prime, ilapat ang algoritmo nang recursive para i-factor ang mga ito nang kumpleto.
  • Kapag lahat ng factor ay prime na, kumpleto na ang pag-factor.

Batay sa pamamaraang ito, maaaring hindi malinaw kung bakit kailangan ng quantum computer para makumpleto ang gawaing ito. Kinakailangan ito dahil ang hakbang 2, ang paghanap ng order ng aa modulo NN, ay klasikal na napakahirap na problema. Ang complexity ay nagsa-scale nang exponential sa numero NN. Ngunit sa isang quantum computer, kailangan lang nating gamitin ang Quantum Phase Estimation para malutas ito. Ang hakbang 4, ang paghanap ng GCD ng dalawang integer, ay talagang medyo madaling gawin nang klasikal. Kaya, ang tanging hakbang na talagang nangangailangan ng kapangyarihan ng quantum computer ay ang hakbang ng order-finding. Sinasabi natin na ang problema ng pag-factor ay "nababawas" sa problema ng order-finding.

Ang mahirap na bahagi: order findingโ€‹

Ngayon, dadaan tayo sa kung paano natin magagamit ang quantum computer sa order finding. Una, linawin natin kung ano ang ibig nating sabihin ng "order." Siyempre, sinabi ko na sa iyo kung ano ang ibig sabihin ng order nang matematika: ito ang unang non-zero na integer rr kung saan ar=1(modN).a^r = 1 \pmod N. Ngunit tingnan natin kung makakakuha tayo ng kaunting intuwisyon para sa konsepto na ito.

Para sa sapat na maliit na NN, maaari lang nating matukoy ang order sa pamamagitan ng pagkalkula ng bawat kapangyarihan ng aa, pagkuha ng modulus NN ng numerong iyon, pagkatapos ay huminto kapag nahanap natin ang kapangyarihang rr na nagbibigay-kasiyahan sa ar=1mod(N)a^r = 1 \text{mod}(N). Iyon ang ginawa natin sa ating halimbawa, N=15N=15, sa itaas. Tingnan natin ang ilang graph ng mga modular power na ito para sa ilang sample na halaga ng aa at NN:

Halaga ng a sa kapangyarihan ng k modulo N kumpara sa kapangyarihang k, kung saan a=2 at N=15. Makikita natin na habang tumataas ang k, lumilitaw ang isang paulit-ulit na pattern, na nagpapakita na ang a^k modulo N ay periodic sa k.

Halaga ng a sa kapangyarihan ng k modulo N kumpara sa kapangyarihang k, kung saan a=5 at N=21. Makikita natin na habang tumataas ang k, lumilitaw ang isang paulit-ulit na pattern, na nagpapakita na ang a^k modulo N ay periodic sa k.

May napansin? Ang mga ito ay periodic na function! At ang order na rr ay kapareho ng panahon! Kaya, ang order-finding ay katumbas ng period-finding.

Ang mga quantum computer ay napakahusay sa paghanap ng panahon ng mga function. Para dito, maaari tayong gumamit ng isang algorithmic subroutine na tinatawag na Quantum Phase Estimation. Tinatalakay natin ang QPE at ang relasyon nito sa Quantum Fourier Transform sa nakaraang modyul. Para sa detalyadong refresher, pumunta sa QFT module o aralin ni John Watrous sa Quantum Phase Estimation sa kanyang kurso sa Quantum Algorithms. Dadaan tayo sa pangunahing proseso ngayon:

Sa Quantum Phase Estimation (QPE), nagsisimula tayo sa isang unitary na UU at isang eigenstate ng unitary na iyon na โˆฃฯˆโŸฉ|\psi\rangle. Pagkatapos, ginagamit natin ang QPE para tantiyahin ang kaukulang eigenvalue, na, dahil ang operator ay unitary, ay magiging anyo ng e2ฯ€iฮธe^{2\pi i \theta}. Kaya, ang paghanap ng eigenvalue ay katumbas ng paghanap ng halaga ng ฮธ\theta sa periodic na function. Ganito ang hitsura ng Circuit:

Diagram ng Circuit ng Quantum phase estimation procedure. Ang nangungunang m control Qubit ay inihanda sa mga superposition gamit ang mga Hadamard Gate, pagkatapos ang mga controlled-unitary Gate ay inilapat sa mga ibabang Qubit, na nasa eigenstate ng unitary. Sa wakas, inilapat ang inverse quantum Fourier transform sa mga nangungunang Qubit at nasusukat ang mga ito.

kung saan ang bilang ng mga control Qubit (ang nangungunang mm na Qubit sa larawan sa itaas) ay nagtatakda ng katumpakan ng pagtatantya.

Sa algoritmo ni Shor, ginagamit natin ang QPE sa unitary operator na MaM_a:

MaโˆฃyโŸฉโ‰กโˆฃaymodโ€‰โ€‰NโŸฉ. M_a|y\rangle \equiv |ay \mod N \rangle .

Dito, ang โˆฃyโŸฉ|y\rangle ay nagtatanda ng isang computational basis state ng multi-qubit register, kung saan ang binary na halaga ng mga Qubit ay tumutugma sa integer na yy. Halimbawa, kung N=15N=15 at y=2y = 2, ang โˆฃyโŸฉ|y\rangle ay kinakatawan ng four-qubit basis state na โˆฃ0010โŸฉ|0010\rangle, dahil apat na Qubit ang kailangan para i-encode ang mga numero hanggang 15. (Kung hindi pamilyar ang konseptong ito, tingnan ang introductory Qiskit in classrooms module para sa isang refresher sa binary encoding ng mga quantum state.)

Ngayon, kailangan nating malaman ang isang eigenstate ng unitary na ito. Kung nagsimula tayo sa state na โˆฃ1โŸฉ|1\rangle, makikita natin na ang bawat sunod na aplikasyon ng UU ay pararamihin ang state ng ating register ng a(modN)a \pmod N, at pagkatapos ng rr na aplikasyon, darating tayo muli sa state na โˆฃ1โŸฉ|1\rangle. Halimbawa, sa a=3a = 3 at N=35N = 35:

M3โˆฃ1โŸฉ=โˆฃ3โŸฉM32โˆฃ1โŸฉ=โˆฃ9โŸฉM33โˆฃ1โŸฉ=โˆฃ27โŸฉโ‹ฎM3(rโˆ’1)โˆฃ1โŸฉ=โˆฃ12โŸฉM3rโˆฃ1โŸฉ=โˆฃ1โŸฉ\begin{aligned} M_3|1\rangle &= |3\rangle & \\ M_3^2|1\rangle &= |9\rangle \\ M_3^3|1\rangle &= |27\rangle \\ & \vdots \\ M_3^{(r-1)}|1\rangle &= |12\rangle \\ M_3^r|1\rangle &= |1\rangle \end{aligned}

Kaya ang mga superposition ng mga state sa cycle na ito (โˆฃฯˆjโŸฉ|\psi_j\rangle) na may anyo:

โˆฃฯˆjโŸฉ=1rโˆ‘k=0rโˆ’1e2ฯ€ijkrโˆฃakโŸฉ|\psi_j\rangle = \tfrac{1}{\sqrt{r}}\sum_{k=0}^{r-1}{e^{\frac{2 \pi i j k}{r}} |a^k \rangle}

ay lahat eigenstate ng MaM_a. (Mayroon pang mas maraming eigenstate kaysa sa mga ito. Ngunit interesado lang tayo sa mga may anyo sa itaas.)

Suriin ang iyong pag-unawaโ€‹

Basahin ang mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para ihayag ang solusyon.

Hanapin ang isang eigenstate ng unitary na tumutugma sa a=2a=2 at N=15N = 15.

Sagot:

M2โˆฃ1โŸฉ=โˆฃ2โŸฉM22โˆฃ1โŸฉ=โˆฃ4โŸฉM23โˆฃ1โŸฉ=โˆฃ8โŸฉM24โˆฃ1โŸฉ=โˆฃ1โŸฉ\begin{aligned} M_2|1\rangle &= |2\rangle & \\ M_2^2|1\rangle &= |4\rangle \\ M_2^3|1\rangle &= |8\rangle \\ M_2^4|1\rangle &= |1\rangle \\ \end{aligned}

Kaya, ang order na r=4r=4. Ang mga eigenstate na interesado tayo ay magiging pantay na superposition ng lahat ng mga state na na-cycle sa itaas, na may iba't ibang phase:

โˆฃฯˆ0โŸฉ=12(โˆฃ1โŸฉ+โˆฃ2โŸฉ+โˆฃ4โŸฉ+โˆฃ8โŸฉ)โˆฃฯˆ1โŸฉ=12(e2ฯ€i04โˆฃ1โŸฉ+e2ฯ€i14โˆฃ2โŸฉ+e2ฯ€i24โˆฃ4โŸฉ+e2ฯ€i34โˆฃ8โŸฉ)=12(โˆฃ1โŸฉ+iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉโˆ’iโˆฃ8โŸฉ)โˆฃฯˆ2โŸฉ=12(e2ฯ€i04โˆฃ1โŸฉ+e2ฯ€i24โˆฃ2โŸฉ+e2ฯ€i44โˆฃ4โŸฉ+e2ฯ€i64โˆฃ8โŸฉ)=12(โˆฃ1โŸฉโˆ’โˆฃ2โŸฉ+โˆฃ4โŸฉโˆ’โˆฃ8โŸฉ)โˆฃฯˆ3โŸฉ=12(e2ฯ€i04โˆฃ1โŸฉ+e2ฯ€i34โˆฃ2โŸฉ+e2ฯ€i64โˆฃ4โŸฉ+e2ฯ€i94โˆฃ8โŸฉ)=12(โˆฃ1โŸฉโˆ’iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉ+iโˆฃ8โŸฉ)\begin{aligned} |\psi_0\rangle &= \frac{1}{2}(|1\rangle+|2\rangle+|4\rangle+|8\rangle) \\ |\psi_1\rangle &= \frac{1}{2}(e^{2 \pi i \frac{0}{4}}|1\rangle+e^{2 \pi i \frac{1}{4}}|2\rangle+e^{2 \pi i \frac{2}{4}}|4\rangle+e^{2 \pi i \frac{3}{4}}|8\rangle) \\ &= \frac{1}{2}(|1\rangle+i|2\rangle-|4\rangle-i|8\rangle) \\ |\psi_2\rangle &= \frac{1}{2}(e^{2 \pi i \frac{0}{4}}|1\rangle+e^{2 \pi i \frac{2}{4}}|2\rangle+e^{2 \pi i \frac{4}{4}}|4\rangle+e^{2 \pi i \frac{6}{4}}|8\rangle) \\ &= \frac{1}{2}(|1\rangle-|2\rangle+|4\rangle-|8\rangle) \\ |\psi_3\rangle &= \frac{1}{2}(e^{2 \pi i \frac{0}{4}}|1\rangle+e^{2 \pi i \frac{3}{4}}|2\rangle+e^{2 \pi i \frac{6}{4}}|4\rangle+e^{2 \pi i \frac{9}{4}}|8\rangle) \\ &= \frac{1}{2}(|1\rangle-i|2\rangle-|4\rangle+i|8\rangle) \\ \end{aligned}

Sabihin nating nagawa nating i-initialize ang ating Qubit state sa isa sa mga eigenstate na ito (spoiler โ€” hindi tayo. O, hindi man lang madali. Ipapaliwanag natin kung bakit at kung ano ang maaari nating gawin sa halip sa ilang sandali). Pagkatapos maaari tayong gumamit ng QPE para tantiyahin ang kaukulang eigenvalue, ฯ‰j=e2ฯ€iฮธj\omega_j = e^{2 \pi i \theta_j} kung saan ฮธj=jr\theta_j = \frac{j}{r}. Pagkatapos, magagawa nating matukoy ang order na rr sa pamamagitan ng simpleng equation:

r=jฮธj.r = \frac{j}{\theta_j}.

Ngunit tandaan, sinabi ko na ang QPE ay tinatantya ang ฮธj\theta_j โ€” hindi nito binibigyan tayo ng eksaktong halaga. Kailangan ng pagtatantya na sapat na tumpak upang mapagkaiba ang rr at r+1r+1. Habang mas maraming control Qubit mm ang mayroon tayo, mas maganda ang pagtatantya. Sa mga problema sa katapusan ng aralin, hihilingin sa iyo na matukoy ang pinakamaliit na mm na kinakailangan para i-factor ang isang numero NN.

Ngayon, kailangan nating ayusin ang isang problema. Ang lahat ng paliwanag sa itaas kung paano hanapin ang rr ay nagsisimula sa paghahanda ng eigenstate na โˆฃฯˆjโŸฉ=1rโˆ‘k=0rโˆ’1e2ฯ€ijkrโˆฃakโŸฉ|\psi_j\rangle = \tfrac{1}{\sqrt{r}}\sum_{k=0}^{r-1}{e^{\frac{2 \pi i j k}{r}} |a^k \rangle}. Ngunit hindi natin alam kung paano gawin iyon nang hindi nalalaman ang rr. Ang lohika ay paikot. Kailangan natin ng paraan para tantiyahin ang eigenvalue nang hindi nini-initialize ang eigenstate.

Sa halip na magsimula sa isang eigenstate ng MaM_a, maaari nating ihanda ang paunang state sa nn-qubit na state na tumutugma sa โˆฃ1โŸฉ|1\rangle sa binary (tulad ng, โˆฃ000...01โŸฉ|000...01\rangle). Kahit na ang state na ito mismo ay malinaw na hindi isang eigenstate ng MaM_a, ito ay isang superposition sa lahat ng eigenstate na โˆฃฯˆkโŸฉ|\psi_k\rangle:

โˆฃ1โŸฉ=1rโˆ‘k=0rโˆ’1โˆฃฯˆkโŸฉ|1\rangle = \frac{1}{\sqrt{r}} \sum\limits_{k=0}^{r-1}{|\psi_k\rangle}

Suriin ang iyong pag-unawaโ€‹

Basahin ang mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para ihayag ang solusyon.

I-verify na ang โˆฃ1โŸฉ|1\rangle ay katumbas ng superposition sa mga eigenstate na nahanap mo para sa N=15N=15 at a=2a=2 sa nakaraang check-in na tanong.

Sagot:

Ang apat na eigenstate ay:

โˆฃฯˆ0โŸฉ=12(โˆฃ1โŸฉ+โˆฃ2โŸฉ+โˆฃ4โŸฉ+โˆฃ8โŸฉ)โˆฃฯˆ1โŸฉ=12(โˆฃ1โŸฉ+iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉโˆ’iโˆฃ8โŸฉ)โˆฃฯˆ2โŸฉ=12(โˆฃ1โŸฉโˆ’โˆฃ2โŸฉ+โˆฃ4โŸฉโˆ’โˆฃ8โŸฉ)โˆฃฯˆ3โŸฉ=12(โˆฃ1โŸฉโˆ’iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉ+iโˆฃ8โŸฉ)\begin{aligned} |\psi_0\rangle &= \frac{1}{2}(|1\rangle+|2\rangle+|4\rangle+|8\rangle) \\ |\psi_1\rangle &= \frac{1}{2}(|1\rangle+i|2\rangle-|4\rangle-i|8\rangle) \\ |\psi_2\rangle &= \frac{1}{2}(|1\rangle-|2\rangle+|4\rangle-|8\rangle) \\ |\psi_3\rangle &= \frac{1}{2}(|1\rangle-i|2\rangle-|4\rangle+i|8\rangle) \\ \end{aligned}

Kaya,

1rโˆ‘k=0rโˆ’1โˆฃฯˆkโŸฉ=12(โˆฃฯˆ0โŸฉ+โˆฃฯˆ1โŸฉ+โˆฃฯˆ2โŸฉ+โˆฃฯˆ3โŸฉ)=14(โˆฃ1โŸฉ+โˆฃ2โŸฉ+โˆฃ4โŸฉ+โˆฃ8โŸฉ+โˆฃ1โŸฉ+iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉโˆ’iโˆฃ8โŸฉ+โˆฃ1โŸฉโˆ’โˆฃ2โŸฉ+โˆฃ4โŸฉโˆ’โˆฃ8โŸฉ+โˆฃ1โŸฉโˆ’iโˆฃ2โŸฉโˆ’โˆฃ4โŸฉ+iโˆฃ8โŸฉ)=14(4โˆฃ1โŸฉ)=โˆฃ1โŸฉ\begin{aligned} \frac{1}{\sqrt{r}} \sum\limits_{k=0}^{r-1}{|\psi_k\rangle} &= \frac{1}{2}(|\psi_0\rangle + |\psi_1\rangle + |\psi_2\rangle + |\psi_3\rangle ) \\ &= \frac{1}{4}(|1\rangle+|2\rangle+|4\rangle+|8\rangle+|1\rangle+i|2\rangle-|4\rangle-i|8\rangle+|1\rangle-|2\rangle+|4\rangle-|8\rangle + |1\rangle-i|2\rangle-|4\rangle+i|8\rangle) \\ &= \frac{1}{4}(4|1\rangle) = |1\rangle \end{aligned}

Paano nito matutulungan tayong mahanap ang order na rr? Dahil ang paunang state ay isang superposition sa lahat ng eigenstate ng anyo na nakalista sa itaas, ang algoritmo ng QPE ay sabay-sabay na tinatantya ang bawat isa sa mga ฮธk\theta_k na tumutugma sa mga eigenstate na ito. Kaya, ang sukat ng mm na control Qubit sa katapusan ay magbubunga ng isang pagtatantya sa halaga ng k/rk/r kung saan ang kโˆˆ{0,1,2,...,rโˆ’1}k \in \{0,1,2,...,r-1\} ay isa sa mga eigenvalue na pinili nang random. Kung uulitin natin ang Circuit na ito nang ilang beses at makakakuha ng ilang sample na may iba't ibang halaga ng kk, mabilis tayong makakaabot sa rr.

I-implement sa Qiskitโ€‹

Gaya ng nabanggit namin kanina, hindi pa kayang i-factor ng aming hardware ang malalaking bilang tulad ng RSA1024. I-factor na lang natin ang isang maliit na numero para ipakita kung paano gumagana ang algorithm. Para sa demo na ito, gagamitin natin ang isang pinasimpleng bersyon ng code mula sa Shor's algorithm tutorial. Kung gusto mo ng mas maraming detalye, bisitahin ang tutorial.

Patatakbuhin natin ang algorithm gamit ang aming karaniwang framework para sa paglutas ng mga quantum na problema, ang tinatawag na Qiskit patterns framework. Ito ay binubuo ng apat na hakbang:

  1. Pag-map ng iyong problema sa isang quantum Circuit
  2. Pag-optimize ng Circuit para patakbuhin sa quantum hardware
  3. Pagpapatakbo ng iyong Circuit sa quantum computer
  4. Post-processing ng mga sukat

1. I-mapโ€‹

I-factor natin ang N=15N=15, at pipiliin ang a=2a=2 bilang aming co-prime na integer.

Una, kailangan nating itayo ang Circuit na magpapatupad ng modular multiplication unitary, MaM_a. Ito talaga ang pinakamahirap na bahagi ng buong implementasyon, at maaaring napaka-computationally expensive, depende sa kung paano ito ginagawa. Para rito, magsisimula tayo ng kaunti: Alam natin na nagsisimula tayo sa estado โˆฃ1โŸฉ|1\rangle, at mula sa isang naunang check-in question,

M2โˆฃ1โŸฉ=โˆฃ2โŸฉM2โˆฃ2โŸฉ=โˆฃ4โŸฉM2โˆฃ4โŸฉ=โˆฃ8โŸฉM2โˆฃ8โŸฉ=โˆฃ1โŸฉ\begin{aligned} M_2|1\rangle &= |2\rangle & \\ M_2|2\rangle &= |4\rangle \\ M_2|4\rangle &= |8\rangle \\ M_2|8\rangle &= |1\rangle \\ \end{aligned}

Kaya, magtatatayo tayo ng isang unitary na gumagawa ng tamang operasyon sa apat na estadong ito, ngunit iniiwan ang lahat ng iba pang estado nang walang pagbabago. Ito ay "pandaraya" dahil ginagamit natin ang ating kaalaman tungkol sa order ng 2โ€Šmodโ€Š152\bmod 15 para pasimplehin ang unitary. Kung talagang sinusubukan nating i-factor ang isang bilang na hindi natin alam ang mga factor, hindi natin magagawa ito.

Suriin ang iyong pag-unawaโ€‹

Basahin ang (mga) tanong sa ibaba, isipin ang iyong sagot, pagkatapos i-click ang tatsulok para makita ang solusyon.

Gamit ang iyong kaalaman kung paano binabago ng operator na M2M_2 ang mga estado sa itaas, itatayo ang operator mula sa isang serye ng SWAP gates, na nagpapalitan ng mga estado ng dalawang Qubit. (Pahiwatig: ang pagsulat ng bawat estado โˆฃiโŸฉ|i\rangle sa binary ay makakatulong.)

Sagot:

Isulat nating muli ang aksyon ng M2M_2 sa mga estado sa binary:

M2โˆฃ0001โŸฉ=โˆฃ0010โŸฉM2โˆฃ0010โŸฉ=โˆฃ0100โŸฉM2โˆฃ0100โŸฉ=โˆฃ1000โŸฉM2โˆฃ1000โŸฉ=โˆฃ0001โŸฉ\begin{aligned} M_2|0001\rangle &= |0010\rangle \\ M_2|0010\rangle &= |0100\rangle \\ M_2|0100\rangle &= |1000\rangle \\ M_2|1000\rangle &= |0001\rangle \\ \end{aligned}

Ang bawat isa sa mga aksyong ito ay maaaring maisakatuparan gamit ang isang simpleng SWAP. Ang M2โˆฃ0001โŸฉM_2|0001\rangle ay nagagawa sa pamamagitan ng pagpapalitan ng mga estado ng Qubit 00 at 11. Ang M2โˆฃ0010โŸฉM_2|0010\rangle ay nagagawa sa pamamagitan ng pagpapalitan ng mga estado ng Qubit 11 at 22. At iba pa. Kaya, maaari nating i-deconstruct ang matrix na M2M_2 sa sumusunod na serye ng SWAP gates:

M2=SWAP(0,1)SWAP(1,2)SWAP(2,3)M_2 = SWAP(0,1)SWAP(1,2)SWAP(2,3)

Aalalahanin na ang mga operator ay kumikilos mula kanan pakaliwa, tiyakin nating mayroon itong epekto na gusto natin sa bawat estado:

M2โˆฃ0001โŸฉ=SWAP(0,1)SWAP(1,2)SWAP(2,3)โˆฃ0001โŸฉ=SWAP(0,1)SWAP(1,2)โˆฃ0001โŸฉ=SWAP(0,1)โˆฃ0001โŸฉ=โˆฃ0010โŸฉโœ“M2โˆฃ0010โŸฉ=SWAP(0,1)SWAP(1,2)SWAP(2,3)โˆฃ0010โŸฉ=SWAP(0,1)SWAP(1,2)โˆฃ0010โŸฉ=SWAP(0,1)โˆฃ0100โŸฉ=โˆฃ0100โŸฉโœ“M2โˆฃ0100โŸฉ=SWAP(0,1)SWAP(1,2)SWAP(2,3)โˆฃ0100โŸฉ=SWAP(0,1)SWAP(1,2)โˆฃ1000โŸฉ=SWAP(0,1)โˆฃ1000โŸฉ=โˆฃ1000โŸฉโœ“M2โˆฃ1000โŸฉ=SWAP(0,1)SWAP(1,2)SWAP(2,3)โˆฃ1000โŸฉ=SWAP(0,1)SWAP(1,2)โˆฃ0100โŸฉ=SWAP(0,1)โˆฃ0010โŸฉ=โˆฃ0001โŸฉโœ“\begin{aligned} M_2|0001\rangle &= SWAP(0,1)SWAP(1,2)SWAP(2,3)|0001\rangle \\ &= SWAP(0,1)SWAP(1,2)|0001\rangle \\ &= SWAP(0,1)|0001\rangle \\ &=|0010\rangle \checkmark \\ M_2|0010\rangle &= SWAP(0,1)SWAP(1,2)SWAP(2,3)|0010\rangle \\ &= SWAP(0,1)SWAP(1,2)|0010\rangle \\ &= SWAP(0,1)|0100\rangle \\ &=|0100\rangle \checkmark \\ M_2|0100\rangle &= SWAP(0,1)SWAP(1,2)SWAP(2,3)|0100\rangle \\ &= SWAP(0,1)SWAP(1,2)|1000\rangle \\ &= SWAP(0,1)|1000\rangle \\ &=|1000\rangle \checkmark \\ M_2|1000\rangle &= SWAP(0,1)SWAP(1,2)SWAP(2,3)|1000\rangle \\ &= SWAP(0,1)SWAP(1,2)|0100\rangle \\ &= SWAP(0,1)|0010\rangle \\ &=|0001\rangle \checkmark \\ \end{aligned}

Maaari na nating i-code ang Circuit na katumbas ng operator na ito sa Qiskit.

Una, i-import natin ang mga kinakailangang package:

# Import necessary packages

import numpy as np
from fractions import Fraction
from math import floor, gcd, log

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.circuit.library import QFTGate
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.visualization import plot_histogram

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler

Pagkatapos, gagawin natin ang operator na M2M_2:

def M2mod15():
"""
M2 (mod 15)
"""
b = 2
U = QuantumCircuit(4)

U.swap(2, 3)
U.swap(1, 2)
U.swap(0, 1)

U = U.to_gate()
U.name = f"M_{b}"

return U
# Get the M2 operator
M2 = M2mod15()

# Add it to a circuit and plot
circ = QuantumCircuit(4)
circ.compose(M2, inplace=True)
circ.decompose(reps=2).draw(output="mpl", fold=-1)

Output of the previous code cell

Ang QPE algorithm ay gumagamit ng controlled-UU Gate. Kaya, ngayon na mayroon na tayong Circuit na M2M_2, kailangan nating gawing controlled-M2M_2 Circuit ito:

def controlled_M2mod15():
"""
Controlled M2 (mod 15)
"""
b = 2
U = QuantumCircuit(4)

U.swap(2, 3)
U.swap(1, 2)
U.swap(0, 1)

U = U.to_gate()
U.name = f"M_{b}"
c_U = U.control()

return c_U
# Get the controlled-M2 operator
controlled_M2 = controlled_M2mod15()

# Add it to a circuit and plot
circ = QuantumCircuit(5)
circ.compose(controlled_M2, inplace=True)
circ.decompose(reps=1).draw(output="mpl", fold=-1)

Output of the previous code cell

Mayroon na tayong controlled-UU Gate. Ngunit para mapatakbo ang Quantum Phase Estimation algorithm, kakailanganin natin ang controlled-U2U^2, controlled-U4U^4, hanggang sa controlled-U2mโˆ’1U^{2^{m-1}}, kung saan ang mm ay ang bilang ng mga Qubit na ginagamit para tantiyahin ang phase. Habang mas maraming Qubit, mas tumpak ang phase estimation. Gagamitin natin ang m=8m=8 control Qubit para sa aming phase estimation procedure. Kaya, kailangan natin ang:

Ma2kโˆฃyโŸฉโ‰กโˆฃa2kyโ€Šmodโ€ŠNโŸฉM_{a^{2^k}}|y\rangle \equiv |a^{2^k} y \bmod N \rangle

kung saan ang index na kk, na may 0โ‰คkโ‰คmโˆ’1=70 \le k \le m-1 = 7, ay tumutugma sa control Qubit. Ngayon, kalkulahin natin ang a2kโ€Šmodโ€ŠNa^{2^k}\bmod N para sa bawat value ng kk:

def a2kmodN(a, k, N):
"""Compute a^{2^k} (mod N) by repeated squaring"""
for _ in range(k):
a = int(np.mod(a**2, N))
return a
k_list = range(8)
b_list = [a2kmodN(2, k, 15) for k in k_list]

print(b_list)
[2, 4, 1, 1, 1, 1, 1, 1]

Dahil ang a2kโ€Šmodโ€ŠN=1a^{2^k} \bmod N = 1 para sa kโ‰ฅ2k \ge 2, lahat ng kaukulang operator (M8M_8 pataas) ay katumbas ng identity. Kaya, isa na lang pang matrix ang kailangan nating itayo, ang M4.M_4.

Tandaan: Ang simplipikasyong ito ay gumagana lamang dito dahil ang order ng 2โ€Šmodโ€Š152 \bmod 15 ay 44. Kapag ang k=2k=2 (kaya 2k=42^k = 4), ang bawat kasunod na kapangyarihan ng operator ay ang identity. Sa pangkalahatan, para sa mas malalaking bilang na NN o ibang pagpili ng aa, hindi mo maaaring laktawan ang pagtatayo ng mas mataas na mga kapangyarihan. Ito ay isa sa mga dahilan kung bakit ito ay itinuturing na isang toy example: ang maliliit na numero ay nagbibigay-daan sa mga shortcut na hindi gagana para sa mas malalaking kaso.

def M4mod15():
"""
M4 (mod 15)
"""
b = 4
U = QuantumCircuit(4)

U.swap(1, 3)
U.swap(0, 2)

U = U.to_gate()
U.name = f"M_{b}"

return U
# Get the M4 operator
M4 = M4mod15()

# Add it to a circuit and plot
circ = QuantumCircuit(4)
circ.compose(M4, inplace=True)
circ.decompose(reps=2).draw(output="mpl", fold=-1)

Output of the previous code cell

At tulad ng dati, gagawin natin itong controlled-M4M_4 operator:

def controlled_M4mod15():
"""
Controlled M4 (mod 15)
"""
b = 4
U = QuantumCircuit(4)

U.swap(1, 3)
U.swap(0, 2)

U = U.to_gate()
U.name = f"M_{b}"
c_U = U.control()

return c_U
# Get the controlled-M4 operator
controlled_M4 = controlled_M4mod15()

# Add it to a circuit and plot
circ = QuantumCircuit(5)
circ.compose(controlled_M4, inplace=True)
circ.decompose(reps=1).draw(output="mpl", fold=-1)

Output of the previous code cell

Ngayon, maaari na nating pagsamahin ang lahat para mahanap ang order ng 2โ€Šmodโ€Š152\bmod 15 gamit ang isang quantum Circuit, sa pamamagitan ng phase estimation:

# Order finding problem for N = 15 with a = 2
N = 15
a = 2

# Number of qubits
num_target = floor(log(N - 1, 2)) + 1 # for modular exponentiation operators
num_control = 2 * num_target # for enough precision of estimation

# List of M_b operators in order
k_list = range(num_control)
b_list = [a2kmodN(2, k, 15) for k in k_list]

# Initialize the circuit
control = QuantumRegister(num_control, name="C")
target = QuantumRegister(num_target, name="T")
output = ClassicalRegister(num_control, name="out")
circuit = QuantumCircuit(control, target, output)

# Initialize the target register to the state |1>
circuit.x(num_control)

# Add the Hadamard gates and controlled versions of the
# multiplication gates
for k, qubit in enumerate(control):
circuit.h(k)
b = b_list[k]
if b == 2:
circuit.compose(
M2mod15().control(), qubits=[qubit] + list(target), inplace=True
)
elif b == 4:
circuit.compose(
M4mod15().control(), qubits=[qubit] + list(target), inplace=True
)
else:
continue # M1 is the identity operator

# Apply the inverse QFT to the control register
circuit.compose(QFTGate(num_control).inverse(), qubits=control, inplace=True)

# Measure the control register
circuit.measure(control, output)

circuit.draw("mpl", fold=-1)

Output of the previous code cell

2. I-optimizeโ€‹

Ngayon na na-map na natin ang aming Circuit, ang susunod na hakbang ay ang pag-optimize nito para patakbuhin sa isang partikular na quantum computer. Una, kailangan nating i-load ang Backend.

service = QiskitRuntimeService()

backend = service.backend("ibm_marrakesh")

Kung wala kang available na oras sa iyong account o gusto mong gumamit ng simulator sa anumang dahilan, maaari mong patakbuhin ang cell sa ibaba para mag-set up ng simulator na magpapanggap na quantum device na aming pinili sa itaas:

pm = generate_preset_pass_manager(optimization_level=2, backend=backend)

transpiled_circuit = pm.run(circuit)

print(f"2q-depth: {transpiled_circuit.depth(lambda x: x.operation.num_qubits==2)}")
print(f"2q-size: {transpiled_circuit.size(lambda x: x.operation.num_qubits==2)}")
print(f"Operator counts: {transpiled_circuit.count_ops()}")
transpiled_circuit.draw(output="mpl", fold=-1, style="clifford", idle_wires=False)
2q-depth: 188
2q-size: 281
Operator counts: OrderedDict({'sx': 548, 'rz': 380, 'cz': 281, 'measure': 8, 'x': 6})

Output of the previous code cell

3. Isagawaโ€‹

# Sampler primitive to obtain the probability distribution
sampler = Sampler(backend)

# Turn on dynamical decoupling with sequence XpXm
sampler.options.dynamical_decoupling.enable = True
sampler.options.dynamical_decoupling.sequence_type = "XpXm"
# Enable gate twirling
sampler.options.twirling.enable_gates = True

pub = transpiled_circuit
job = sampler.run([pub], shots=1024)
result = job.result()[0]
counts = result.data["out"].get_counts()
plot_histogram(counts, figsize=(35, 5))

Output of the previous code cell

Nakikita natin ang apat na malinaw na tuktok sa 00000000, 01000000, 10000000, at 11000000, na may ilang bilang sa iba pang mga bitstring dahil sa ingay sa quantum computer. Ibibukod natin ang mga ito at iingatan lang ang nangingibabaw na apat sa pamamagitan ng pagtatakda ng threshold: ang mga bilang na nasa itaas ng threshold na ito lamang ang itinuturing na tunay na signal na higit sa ingay.

# Dictionary of bitstrings and their counts to keep
counts_keep = {}
# Threshold to filter
threshold = np.max(list(counts.values())) / 2

for key, value in counts.items():
if value > threshold:
counts_keep[key] = value

print(counts_keep)

4. Post-processโ€‹

Para sa Shor's algorithm, malaking bahagi ng algorithm ay isinasagawa nang klasikal. Kaya, ilalagay natin ang natitirang bahagi sa hakbang na "post-processing," pagkatapos makuha ang ating mga sukat mula sa quantum computer. Ang bawat isa sa mga sukat sa itaas ay maaaring i-convert sa mga integer, na, pagkatapos nating hatiin sa 2m2^m, ay ating mga pagtatantya para sa kr\frac{k}{r}, kung saan ang kk ay random sa bawat pagkakataon.

a = 2
N = 15

FACTOR_FOUND = False
num_attempt = 0

while not FACTOR_FOUND:
print(f"\nATTEMPT {num_attempt}:")
# Here, we get the bitstring by iterating over outcomes
# of a previous hardware run with multiple shots.
# Instead, we can also perform a single-shot measurement
# here in the loop.
bitstring = list(counts_keep.keys())[num_attempt]
num_attempt += 1
# Find the phase from measurement
decimal = int(bitstring, 2)
phase = decimal / (2**num_control) # phase = k / r
print(f"Phase: theta = {phase}")

# Guess the order from phase
frac = Fraction(phase).limit_denominator(N)
r = frac.denominator # order = r
print(f"Order of {a} modulo {N} estimated as: r = {r}")

if phase != 0:
# Guesses for factors are gcd(a^{r / 2} ยฑ 1, 15)
if r % 2 == 0:
x = pow(a, r // 2, N) - 1
d = gcd(x, N)
if d > 1:
FACTOR_FOUND = True
print(f"*** Non-trivial factor found: {x} ***")
ATTEMPT 0:
Phase: theta = 0.0
Order of 2 modulo 15 estimated as: r = 1

ATTEMPT 1:
Phase: theta = 0.75
Order of 2 modulo 15 estimated as: r = 4
*** Non-trivial factor found: 3 ***

Konklusyonโ€‹

Pagkatapos dumaan sa module na ito, maaaring magkaroon ka ng bagong pagpapahalaga sa katalinuhan ni Peter Shor na makagawa ng ganoong matalinong algorithm. Ngunit sana ay nakarating ka na rin sa isang bagong antas ng pag-unawa sa kanyang mapanlinlang na kasimplihan. Kahit na mukhang kahanga-hanga (o nakakatakot) ang algorithm, kung hahati-hatiin mo ito sa bawat hakbang ng lohika at dahan-dahang dadaanan, ikaw din ay makakapagtakbo ng Shor's algorithm.

Malayo pa tayo sa paggamit ng algorithm na ito para i-factor ang mga bilang tulad ng RSA1024, ngunit ang aming mga quantum computer ay nagiging mas mahusay araw-araw, at kapag naabot na ang isang threshold na tinatawag na fault tolerance, ang mga algorithm na tulad nito ay malapit nang sumunod. Kapana-panabik na panahon ito para matuto tungkol sa quantum computing!

Mga Problemaโ€‹

Mga kritikal na konsepto:โ€‹

  • Ang mga modernong cryptographic system ay umaasa sa klasikal na kahirapan ng pag-factor ng malalaking integer.
  • Ang modular arithmetic โ€” kabilang ang mga istruktura ng ZN\mathbb{Z}_N at ZNโˆ—\mathbb{Z}_N^* โ€” ay nagbibigay ng mathematical na pundasyon para sa Shor's algorithm.
  • Ang problema ng pag-factor ng integer na NN ay maaaring bawasan sa problema ng paghanap ng order ng isang numero modulo NN.
  • Ang quantum order finding ay gumagamit ng mga quantum phase estimation technique para matukoy ang period ng function na axmodโ€‰โ€‰Na^x \mod N.
  • Ang Shor's algorithm ay binubuo ng isang klasikalโ€“quantum hybrid workflow na pumipili ng base, nagsasagawa ng quantum order finding, at pagkatapos ay klasikal na kinakalkula ang mga factor mula sa resulta.

Tama/Mali:โ€‹

  1. T/M Ang kahusayan ng Shor's algorithm ay nagbabanta sa seguridad ng RSA encryption.
  2. T/M Ang Shor's algorithm ay maaaring maisakatuparan nang mahusay sa anumang makabagong quantum computer ngayon.
  3. T/M Ang Shor's algorithm ay gumagamit ng quantum phase estimation (QPE) bilang isang pangunahing subroutine.
  4. T/M Ang klasikal na bahagi ng Shor's algorithm ay kinabibilangan ng pagkalkula ng greatest common divisor (GCD).
  5. T/M Ang Shor's algorithm ay gumagana lamang para sa pag-factor ng mga pantay na bilang.
  6. T/M Ang isang matagumpay na pagtakbo ng Shor's algorithm ay palaging ginagarantiyahang tama ang mga factor.

Maikling sagot:โ€‹

  1. Bakit itinuturing na isang potensyal na banta sa hinaharap ang Shor's algorithm sa RSA encryption?
  2. Bakit nakakatulong ang paghanap ng period, o order, ng isang modular exponential function para sa pag-factor ng isang numero sa Shor's algorithm?

Mga hamon na problema:โ€‹

  1. Ilang control Qubit na mm ang kailangan natin para sa isang ibinigay na bilang na NN na sinusubukan nating i-factor para makuha ang precision sa QPE na kinakailangan para mahanap ang tamang value ng order na rr?

  2. Sinusunod ang pamamaraan na aming binalangkas dito para i-factor ang 15, subukan mo ngayong i-factor ang 21.