Algoritmul lui Shor
Pentru acest modul Qiskit în Sală de Clasă, studenții trebuie să aibă un mediu Python funcțional cu următoarele pachete instalate:
qiskitv2.1.0 sau mai nouqiskit-ibm-runtimev0.40.1 sau mai nouqiskit-aerv0.17.0 sau mai nouqiskit.visualizationnumpypylatexenc
Pentru a configura și instala pachetele de mai sus, consultă ghidul Instalează Qiskit. Pentru a rula joburi pe calculatoare cuantice reale, studenții vor trebui să își creeze un cont IBM Quantum® urmând pașii din ghidul Configurează-ți contul IBM Cloud.
Acest modul a fost testat și a folosit trei secunde de timp QPU. Aceasta este doar o estimare. Utilizarea ta reală poate varia.
# 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'
Introducere
La începutul anilor 1990, entuziasmul față de potențialul calculatoarelor cuantice de a rezolva probleme dificile pentru calculatoarele clasice era în creștere. Câțiva informaticieni talentați concepuseră algoritmi care demonstrau puterea calculului cuantic pentru unele probleme de nișă și artificiale, dar nimeni nu găsise o singură „aplicație ucigașă" a calculului cuantic care să fie sigur că va revoluționa domeniul. Asta până în 1994, când Peter Shor a elaborat ceea ce este acum cunoscut ca algoritmul lui Shor pentru factorizarea numerelor mari.
Era bine știut la acea vreme că găsirea factorilor primi ai unui număr mare era extrem de dificilă pentru un calculator clasic. De fapt, protocoalele de securitate pe internet se bazau pe această dificultate. Shor a găsit o modalitate de a descoperi acești factori exponențial mai eficient, delegând unii dintre pașii mai dificili unui calculator cuantic teoretic, din viitor.
În acest modul, vom explora algoritmul lui Shor. Mai întâi, vom oferi puțin mai mult context algoritmului, formalizând problema pe care o rezolvă și explicând relevanța pentru securitatea cibernetică. Apoi, vom face o introducere în matematica modulară și cum să o aplicăm problemei de factorizare, arătând cum factorizarea se reduce la o altă problemă numită „găsirea ordinului". Vom arăta cum intervin Transformata Fourier Cuantică și Estimarea Fazei Cuantice, pe care le-am studiat într-un modul anterior, și cum să le folosim pentru a rezolva problema găsirii ordinului.
În final, vom rula algoritmul lui Shor pe un calculator cuantic real! Ține minte, totuși, că acest algoritm va fi cu adevărat util abia când vom avea un calculator cuantic mare, tolerant la erori, lucru care mai este încă la câțiva ani distanță. Prin urmare, vom factoriza doar un număr mic pentru a demonstra cum funcționează algoritmul.
Problema factorizării
Scopul problemei de factorizare este de a găsi factorii primi ai unui număr . Pentru unele numere , acest lucru este destul de simplu. De exemplu, dacă este par, unul dintre factorii săi primi va fi 2. Dacă este o putere a unui număr prim, adică pentru un număr prim , este, de asemenea, destul de ușor de găsit : aproximăm pur și simplu rădăcina a lui și căutăm numere prime apropiate care ar putea fi .
Unde calculatoarele clasice întâmpină dificultăți este atunci când este impar și nu este o putere a unui număr prim. Acesta este cazul cu care se ocupă algoritmul lui Shor. Algoritmul găsește doi factori și astfel încât . El poate fi aplicat recursiv până când toți factorii sunt primi. În secțiunile următoare vom vedea cum este abordată această problemă.
Relevanța pentru securitatea cibernetică
Multe scheme criptografice au fost construite pe baza faptului că factorizarea numerelor mari este dificilă, inclusiv una utilizată frecvent astăzi, numită RSA. În RSA, o cheie publică este creată prin înmulțirea a două numere prime mari pentru a obține . Apoi, oricine poate folosi această cheie publică pentru a cripta date. Dar numai cineva care deține cheia privată, și , poate decripta acele date.
Dacă ar fi ușor de factorizat, atunci oricine ar putea determina valorile lui și și ar sparge criptarea. Dar nu este. Aceasta este o problemă de notorietate pentru dificultatea sa. De fapt, factorii primi ai unui număr numit RSA1024, care are 1024 de cifre binare și 309 de cifre zecimale, nu au fost găsiți până în prezent, în ciuda unui premiu de $100.000 oferit pentru factorizarea sa încă din 1991.
Soluția lui Shor
În 1994, Peter Shor și-a dat seama că un calculator cuantic poate factoriza un număr mare exponențial mai eficient decât un calculator clasic. Intuiția sa s-a bazat pe relația dintre această problemă de factorizare și aritmetica modulară. Vom trece printr-o scurtă introducere în aritmetica modulară, apoi vom vedea cum putem folosi acest lucru pentru a factoriza .
Aritmetica modulară
Aritmetica modulară este un sistem de numărare ciclic, adică, deși numărătoarea începe în mod obișnuit, cu numerele întregi 0, 1, 2 etc., la un moment dat, după o perioadă , numărătoarea reîncepe de la capăt. Să vedem cum funcționează cu un exemplu. Să spunem că perioada noastră este 5. Atunci, pe măsură ce numărăm, acolo unde în mod normal am ajunge la 5, reîncepem de la 0:
Aceasta se datorează faptului că în lumea „modulo-5", 5 este echivalent cu 0. Spunem că . De fapt, toate multiplele lui 5 vor fi echivalente cu .
Verifică-ți înțelegerea
Citește întrebarea (întrebările) de mai jos, gândește-te la răspuns, apoi dă clic pe triunghi pentru a dezvălui soluția.
Folosește aritmetica modulară pentru a rezolva următoarea problemă:
Pleci într-o călătorie lungă cu trenul transcontinental la ora 8 dimineața. Călătoria cu trenul durează 60 de ore. La ce oră ajungi?
Răspuns:
Perioada este 24, deoarece într-o zi sunt 24 de ore. Astfel, această problemă poate fi scrisă în aritmetică modulară ca:
Deci, ai ajunge la destinație la ora 20:00, adică 8 seara.
și
Este adesea util să introducem două mulțimi, și . este pur și simplu mulțimea numerelor care există într-o lume „modulo-". De exemplu, când număram modulo-5, mulțimea ar fi . Un alt exemplu: . Putem efectua adunări și înmulțiri (modulo ) pe elementele din , iar rezultatul fiecăreia dintre aceste operații este, de asemenea, un element din , ceea ce face din un obiect matematic numit inel.
Există un subset special al lui care prezintă un interes deosebit pentru noi în cazul algoritmului lui Shor. Acesta este subsetul numerelor din astfel încât cel mai mare divizor comun dintre fiecare element și este 1, deci fiecare element este „coprim" cu . Dacă luăm mulțimea acestor numere împreună cu operația de înmulțire modulară, aceasta formează un alt obiect matematic, numit grup. Numim acest grup . Se dovedește că în cazul (și al grupurilor finite în general), dacă alegem orice element și îl înmulțim repetat cu el însuși, vom obține întotdeauna în cele din urmă numărul . Numărul minim de ori de câte ori trebuie să înmulțești cu el însuși pentru a obține se numește ordinul lui . Acest fapt va fi foarte important în discuția noastră despre cum să factorizăm numerele de mai jos.
Verifică-ți înțelegerea
Citește întrebarea (întrebările) de mai jos, gândește-te la răspuns, apoi dă clic pe triunghi pentru a dezvălui soluția.
Care este ?
Răspuns:
Am exclus următoarele numere:
Care este ordinul fiecăruia dintre elementele din ?
Răspuns:
Ordinul este cel mai mic număr astfel încât pentru fiecare element .
Rețineți că, deși am reușit să găsim ordinul numerelor din , aceasta NU este o sarcină ușoară în general, pentru mai mare. Acesta este miezul problemei de factorizare și motivul pentru care avem nevoie de un calculator cuantic. Vom vedea de ce pe măsură ce parcurgem restul notebook-ului.
Aplică aritmetica modulară problemei de factorizare
Cheia pentru găsirea factorilor și astfel încât constă în găsirea unui alt număr întreg astfel încât
și
Cum ne ajută găsirea lui să găsim factorii și ? Să parcurgem argumentul acum. Deoarece , înseamnă că . Cu alte cuvinte, este un multiplu al lui . Deci, pentru un număr întreg ,
Putem factoriza pentru a obține:
Din ipotezele noastre inițiale știm că , deci nu se împarte exact în nici , nici . Astfel, cei doi factori ai lui , și , trebuie să se împartă fiecare în și . Fie este un factor al lui și este un factor al lui , fie invers. Prin urmare, dacă calculăm cel mai mare divizor comun (CMMDC) dintre și atât , cât și , vom obține factorii și . Calcularea CMMDC dintre două numere este o sarcină clasic ușoară, care poate fi realizată, de exemplu, folosind algoritmul lui Euclid.
Verifică-ți înțelegerea
Citește întrebarea (întrebările) de mai jos, gândește-te la răspuns, apoi dă clic pe triunghi pentru a dezvălui soluția.
Poate fi dificil să înțelegi fiecare pas din logica de mai sus, deci încearcă să parcurgi un exemplu. Folosește și . Mai întâi, verifică că și . Apoi continuă să verifici fiecare pas. În final, calculează și verifică că aceștia sunt factorii lui .
Răspuns:
, care este , deci .
, care nu este echivalent cu .
, care nu este echivalent cu .
Acum, știm că pentru un număr întreg . Aceasta se verifică când introducem și : când .
Acum, trebuie să calculăm și .
Astfel, am găsit factorii lui !
Algoritmul
Acum că am văzut cum găsirea unui întreg astfel încât ne ajută să factorizăm , putem parcurge algoritmul lui Shor. Practic, totul se reduce la găsirea lui :
- Alege un întreg aleatoriu Alege un întreg aleatoriu astfel încât .
- Calculează clasic.
- Dacă , ai găsit deja un factor. Oprește-te.
- Altfel, continuă.
-
Găsește ordinul al lui modulo Găsește cel mai mic întreg pozitiv care satisface .
-
Verifică dacă ordinul este par
- Dacă este impar, întoarce-te la pasul 1 și alege un nou .
- Dacă este par, continuă la pasul 4.
- Calculează
- Verifică că și .
- Dacă , întoarce-te la pasul 1 și alege un nou .
- Altfel, calculează cel mai mare divizor comun pentru a extrage factorii:
Aceștia vor fi factori netriviali ai lui .
- Factorizează recursiv dacă este necesar
- Dacă și/sau nu sunt primi, aplică algoritmul recursiv pentru a-i factoriza complet.
- Odată ce toți factorii sunt primi, factorizarea este completă.
Pe baza acestei proceduri, s-ar putea să nu fie evident de ce este nevoie de un calculator cuantic pentru a finaliza această sarcină. Este necesar deoarece pasul 2, găsirea ordinului lui modulo , este clasic o problemă foarte dificilă. Complexitatea scalează exponențial în funcție de . Dar cu un calculator cuantic, trebuie doar să folosim Estimarea de Fază Cuantică pentru a o rezolva. Pasul 4, găsirea celui mai mare divizor comun a două numere întregi, este de fapt un lucru destul de ușor de făcut clasic. Astfel, singurul pas care necesită cu adevărat puterea unui calculator cuantic este pasul de găsire a ordinului. Spunem că problema factorizării „se reduce" la problema găsirii ordinului.
Partea dificilă: găsirea ordinului
Acum vom parcurge modul în care putem folosi un calculator cuantic în găsirea ordinului. Mai întâi, să clarificăm ce înțelegem prin „ordin." Bineînțeles, ți-am spus deja ce înseamnă ordinul matematic: este primul întreg non-zero astfel încât Dar haideți să vedem dacă putem câștiga puțin mai multă intuiție pentru acest concept.
Pentru suficient de mic, putem determina ordinul pur și simplu calculând fiecare putere a lui , luând modulul al acelui număr, apoi oprindu-ne când găsim puterea care satisface . Asta am făcut cu exemplul nostru, , mai sus. Să aruncăm o privire la câteva grafice ale acestor puteri modulare pentru câteva valori de exemplu ale lui și :
Observi ceva? Acestea sunt funcții periodice! Și ordinul este același cu perioada! Deci, găsirea ordinului este echivalentă cu găsirea perioadei.
Calculatoarele cuantice sunt foarte bine adaptate pentru găsirea perioadei funcțiilor. Pentru aceasta, putem folosi o subrutină algoritmică numită Estimarea de Fază Cuantică. Am discutat QPE și relația sa cu Transformata Fourier Cuantică în modulul precedent. Pentru o recapitulare detaliată, mergi la modulul QFT sau la lecția lui John Watrous despre Estimarea de Fază Cuantică din cursul său de Algoritmi Cuantici. Vom trece prin esența procedurii acum:
În Estimarea de Fază Cuantică (QPE), pornim cu un unitar și o stare proprie a acelui unitar . Apoi, folosim QPE pentru a aproxima valoarea proprie corespunzătoare, care, deoarece operatorul este unitar, va fi de forma . Deci, găsirea valorii proprii este echivalentă cu găsirea valorii în funcția periodică. Circuitul arată astfel:

unde numărul de Qubiți de control (cei Qubiți din vârf în figura de mai sus) determină precizia aproximării.
În algoritmul lui Shor, folosim QPE pe operatorul unitar :
Aici, denotă o stare de bază computațională a registrului multi-Qubit, unde valoarea binară a Qubiților corespunde întregului . De exemplu, dacă și , atunci este reprezentat de starea de bază cu patru Qubiți , deoarece patru Qubiți sunt necesari pentru a codifica numere până la 15. (Dacă acest concept nu îți este familiar, consultați modulul introductiv Qiskit în clase pentru o recapitulare a codificării binare a stărilor cuantice.)
Acum, trebuie să identificăm o stare proprie a acestui unitar. Dacă am porni din starea , putem vedea că fiecare aplicare succesivă a lui va înmulți starea registrului nostru cu , și după aplicări vom ajunge din nou la starea . De exemplu cu și :
Deci superpozițiile stărilor din acest ciclu () de forma:
sunt toate stări proprii ale lui . (Există mai multe stări proprii decât doar acestea. Dar ne interesează doar cele de forma de mai sus.)
Verifică-ți înțelegerea
Citește întrebarea (întrebările) de mai jos, gândește-te la răspuns, apoi apasă pe triunghi pentru a dezvălui soluția.
Găsește o stare proprie a unitarului corespunzător lui și .
Răspuns:
Deci, ordinul . Stările proprii care ne interesează vor fi o superpoziție egală a tuturor stărilor prin care s-a trecut mai sus, cu diverse faze:
Să presupunem că am fi capabili să inițializăm starea Qubitului nostru într-una din aceste stări proprii (spoiler — nu putem. Sau, cel puțin nu ușor. Vom explica de ce și ce putem face în schimb în scurt timp). Atunci am putea folosi QPE pentru a estima valoarea proprie corespunzătoare, unde . Apoi, vom putea determina ordinul prin simpla ecuație:
Dar ține minte, am spus că QPE estimează — nu ne oferă o valoare exactă. Avem nevoie ca estimarea să fie suficient de bună pentru a diferenția între și . Cu cât avem mai mulți Qubiți de control , cu atât estimarea va fi mai bună. În problemele de la sfârșitul lecției, ți se va cere să determini -ul minim necesar pentru a factoriza un număr .
Acum, trebuie să rezolvăm o problemă. Toată explicația de mai sus despre cum să găsim începe cu pregătirea stării proprii . Dar nu știm cum să facem asta fără să cunoaștem deja . Logica este circulară. Avem nevoie de o modalitate de a estima valoarea proprie fără a inițializa starea proprie.
În loc să pornim cu o stare proprie a lui , putem pregăti starea inițială în starea de Qubiți corespunzătoare lui în binar (adică ). Deși această stare în sine nu este în mod evident o stare proprie a lui , ea este o superpoziție peste toate stările proprii :
Verifică-ți înțelegerea
Citește întrebarea (întrebările) de mai jos, gândește-te la răspuns, apoi apasă pe triunghi pentru a dezvălui soluția.
Verifică că este echivalent cu superpoziția peste stările proprii pe care le-ai găsit pentru și în întrebarea de verificare anterioară.
Răspuns:
Cele patru stări proprii au fost:
Deci,