Tuy nhiên việc phát triểnứng dụng lượng tử vẫn còn đối mặt với các thách thức: 1 các máy tínhlượng tử hiện nay còn hạn chế về số lượng qubit và kết quả xử lí chưa ổn định; 2 các ứng dụng
Trang 1ĐẠI HỌC QUỐC GIA TP HÒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA MẠNG MAY TÍNH VÀ TRUYEN THONG
PHAM NGOC TAM DOAN THANH PHUONG
KHOA LUAN TOT NGHIEP
TU DONG HOA QUY TRINH PHAT TRIEN
UNG DỤNG LUONG TU THEO MÔ HÌNH SERVERLESS
Automating the Serverless-based Quantum Software
Development Cycle
KY SU NGANH AN TOAN THONG TIN
TP HO CHi MINH, 2022
Trang 2ĐẠI HỌC QUỐC GIA TP HÒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG
PHẠM NGỌC TÂM - 18521371
ĐOÀN THANH PHƯƠNG - 18521267
KHÓA LUẬN TÓT NGHIỆP
TỰ ĐỌNG HÓA QUY TRÌNH PHAT TRIEN
UNG DỤNG LƯỢNG TU THEO MÔ HÌNH SERVERLESS
Automating the Serverless-based Quantum Software
Development Cycle
KY SU NGANH AN TOAN THONG TIN
GIANG VIEN HUONG DAN
TS PHAM VAN HAU
TP HO CHi MINH, 2022
Trang 3LỜI CẢM ƠN
Lời đầu tiên, nhóm tác giả xin gửi lời cảm ơn đến trường Đại học Côngnghệ thông tin - Đại học Quốc gia Thành phó Hồ Chi Minh, ban Chủnhiệm khoa Mang máy tinh và Truyền thông và thầy Lê Đức Thịnh là cốvan học tập đã tạo điều kiện để nhóm tác giả thực hiện khoá luận tốt nghiệp
này.
Nhóm tác giả gửi lời cảm ơn đặc biệt dén TS Phạm Văn Hậu đã nhậnlời hướng dẫn nhóm chúng em Thay luôn quan tâm, tận tình giúp đỡ vàgiải đáp thắc mắc cho nhóm chúng em bằng những lời khuyên, những gợi
ý về hướng phát triển của đề tài để nhóm chúng em hoàn thành đề tài mộtcách hoàn thiện nhất Bên cạnh đó, nhóm chúng em cũng xin gửi lời cảm
ơn đến ThS Nguyễn Thanh Hòa, thầy đã cho chúng em hướng đi và theo
sát nhóm chúng em trong lúc thực hiện đề tài Nhóm chúng em cũng xingửi lời cảm ơn chân thành đến các giảng viên trong trường Đại học Công
nghệ Thông tin, các giảng viên khoa Mạng máy tính và Truyén thông đã
dạy cho chúng em nhiều kiến thức và giúp cho chúng em trưởng thànhhơn trong cuộc sống Trong quá trình thực hiện khoá luận khó tránh khỏinhững thiếu sót, mong thầy cô tiếp tục góp ý để chúng em hoàn thành tốt
hơn nữa, không chỉ trong khoá luận tốt nghiệp này mà còn trong cuộc sống
và công việc sắp tới Đây là hành trang quý báu giúp chúng em tiếp tụcvững bước trên con đường tiến tới thành công của sự nghiệp sau này
Nhóm tác giả gửi lời cảm ơn đến gia đình, người thân, bạn bè và tập thể
lớp An toàn tài năng 2018 đã luôn đã giúp đố trong những lúc khó khăn
cho chúng em trong suốt quãng đường đại học
Trang 4Nhóm tác giả xin chân thành cam on!
Thành phố Hồ Chi Minh, tháng 7 năm 2022
Nhóm sinh viên
Trang 5TÓM TẮT
Tính toán lượng tử gần đây đã có nhiều bước đột phá về phần cứng, phầnmềm và thuật toán Tính toán lượng tử có thể rút ngắn thời gian xử lí hơnrất nhiều lần so với máy tính truyền thống, một số bài toán để chứng minhnhư là bài toán phân tích thừa số nguyên tố Shor, thuật toán tìm tính chấthàm Deutsch-Jozsa, thuật toán tìm kiếm Grover Tuy nhiên việc phát triểnứng dụng lượng tử vẫn còn đối mặt với các thách thức: (1) các máy tínhlượng tử hiện nay còn hạn chế về số lượng qubit và kết quả xử lí chưa ổn
định; (2) các ứng dụng lượng tử chưa thể tích hợp dần vào các hệ thống
hiện tại bởi vì tốn khá nhiều chỉ phí và nhân lực; (3) các kiến thức về lập
trình lượng tử còn mới với các kỹ sư lập trình để phát triển các ứng dụng
lượng tử Trong Khóa luận tốt nghiệp này, nhóm tác giả triển khai hệ thống
tự động hóa quy trình phát triển ứng dụng lượng tử theo mô hình serverless
computing Đầu tiên, nhóm tác giả nghiên cứu và tóm tắt các lý thuyết cơbản về lượng tử và các kỹ thuật lập trình ứng dụng lượng tử trên các SDKs
và ngôn ngữ mã nguồn mở như Qiskit, Cirq và Q# Tiếp theo, nhóm tác
giả triển khai mô hình serverless bằng máy chủ Kubernetes và OpenFaaS
để có thể triển khai các ứng dụng lượng tử Sau đó nhóm tác giả xây dựnggiao diện hỗ trợ người dùng tiếp cận và sử dụng thông qua hệ thống Cuốicùng, nhóm tác giả triển khai một số thực nghiệm để đánh giá hiệu suất
hệ thống cũng như các ứng dụng lượng tử trên nhiều yếu tố như số lượngngười dùng và số lượng qubit Kết quả các thực nghiệm cho thấy hệ thống
đảm bảo được các chức năng hỗ trợ xây dựng và triển khai các ứng dụng
lượng tử tự động tận dụng DevOps (CI/CD) qua API và giao diện người
dùng Các ứng dụng lượng tử cho hiệu suất khác nhau tùy thuộc vào SDKs
Trang 6và ngôn ngữ sử dụng, số lượng qubit, số lượng người dùng và môi trường
thực thi.
Trang 7ĐẠI HỌC QUOC GIA TP HO CHÍ MINH CONG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
DE CƯƠNG CHI TIẾT
Cán bộ hướng dẫn: TS Pham Văn Hậu
Thời gian thực hiện: Từ ngày 21/02 đến ngày 11/06/2022
Sinh viên thực hiện:
Phạm Ngọc Tâm — 18521371 - 0795541213
Doan Thanh Phương — 18521267 - 0944022034
Nội dung đề tài:
1 Giới thiệu tổng quan
Những bước đột phá cả về phần cứng và phần mềm trong máy tính lượng tử (Quantum computer) hiện nay đang là lĩnh vực nhiều hứa hẹn cho việc áp dụng vào
vấn đề thực tế, bởi vì công nghệ lượng tử có thể giải quyết nhiều bài toán truyền thống
nhanh chóng hơn [1-2] Về phần cứng, đến hiện tại nhà cung cấp dich vụ điện toán đám
mây IBM đã cho ra mắt máy tính lượng tử với 127 qubits giúp tăng khả năng tính toán
rất lớn Về mặt phần mềm, hiện tại các thư viện lập trình lượng tử mã nguồn mở dựa
trên các SDK như Qiskit (IBM)', Cirq (Google)? đã ra đời và có thé giúp con người
viết những ứng dụng lượng tử trên máy tính cổ điền, sau đó chạy trên các máy tính
lượng tử vật lý cung cấp bởi các dịch vụ điện toán đám mây như IBM Quantum, Azure.
1 https://qiskit.org/
? https://quantumai.google/cirq
Trang 8Tuy nhiên, việc phát triển các dich vụ điện toán lượng tử vẫn còn đối mặt với nhiều
thách thức [3-4]:
© Các máy tính lượng tử hiện nay vẫn còn hạn chế về số lượng qubits (quantum
bits) ở mức thấp và trung bình, kết quả xử lý chưa ồn định hay được biết đến làvấn đề NISQ (near-term-intermediate-scale quantum)
e Phat trién ứng dung lượng tử là một lĩnh vực còn rất mới, tạo ra nhiều thách thức
đối với những kỹ sư phát triển phần mềm truyền thống
© Cac ứng dụng trên máy tính truyền thống hiện nay rat phổ biến, việc thay thế hoàn
toàn bằng công nghệ lượng tử sẽ gây ra những quyết định khó khăn cho doanh
nghiệp.
Song song đó, một giải pháp tiềm năng có thê giải quyết các thách thức trên là áp dụng
mô hình Serverless computing (mô hình điện toán “không máy chủ”) FaaS
(Function-as-a-Service) là một mô hình điện toán phổ biến trong Serverless, cung cấp các dịch
vụ theo dạng các Function Người dùng chỉ cần đưa vào các tham số hệ thống sẽ trả
về kết quả, do đó người dùng không cần quan tâm đến việc tự thiết kế và bảo trì hệthống, chi phí sẽ được tính trên yêu cầu người dùng [5]
Do đó nhóm tác giả đề xuất triển khai hệ thống hỗ trợ tự động hoá quy trình pháttriển phần mềm lượng tử theo mô hình Serverless tận dụng được những khả năng củaServerless computing như tối ưu hóa phân bồ tài nguyên, khả năng mở rộng áp dụngvào vận hành các chương trình lượng tử trên điện toán đám mây, triển khai các phầnmềm lượng tử theo mô hình FaaS Hệ thống cung cấp một framework hỗ trợ các lậptrình viên phát triển phần mềm lượng tử nhanh chóng, tự động mà không cần quan tâmđến việc cài đặt máy chủ và các dịch vụ cần thiết Đồng thời hệ thống cũng cung cấpdịch vụ lượng tử giúp người dùng dễ dàng tiếp cận và sử dụng các ứng dụng lượng tử
Trang 92 Mục tiêu nghiên cứu
e _ Nghiên cứu về các kỹ thuật lập trình, lý thuyết cơ bản về lượng tử và các thư
viện mã nguồn mở hỗ trợ lập trình ứng dụng lượng tử
e _ Nghiên cứu và xây dựng hệ thông dựa trên mô hình Serverless hỗ trợ phát triển
các phần mềm lượng tử
© anh giá hiệu quả, chức năng của hệ thống và chứng minh khả năng ứng dụng
thực tế của đề tài trong việc phát triển phần mềm lượng tử
3 Đối tượng và phạm vi nghiên cứu
© Ly thuyết cơ bản, các kỹ thuật lập trình phần mềm lượng tử
¢ Cac framework triển khai mô hình Serverless cloud computing
e Nghién cứu sử dung các dịch vụ máy tính lượng tử của các nhà cung cấp (như
IBM Quantum, Azure Quantum va Amazon Braket).
© _ Các kỹ thuật, giải pháp phát triển phần mềm truyền thống cho phát triển phan
mềm lượng tử.
4 Nội dung chỉ tiết và phương pháp thực hiện
4.1 Nghiên cứu về các kỹ thuật lập trình, lý thuyết cơ bản về lượng tử và
các thư viện mã nguồn mở hỗ trợ lập trình ứng dụng lượng tử
© = Mục tiêu: Nam được kiến thức, thực trạng, lý thuyết cơ bản về lượng tử
và sử dụng các thư viện mã nguồn mở hỗ trợ lập trình ứng dụng lượng
tử (như Qiskit, Cirq, Q#).
e Phuong pháp: Nghiên cứu các tài liệu, bài báo khoa học, các nghiên cứu
liên quan.
4.2 Nghiên cứu áp dung mô hình Serverless cloud computing vào triển khai
ứng dụng lượng tử
© = Mục tiêu: Lựa chon framework hỗ trợ triển khai mô hình Serverless trên
các máy chủ tự quản (OpenFaaS, OpenWhisk) và triển khai cơ bản một
số các ứng dụng lượng tử đảm bảo tính én định, tính mở rộng, tính sẵn
sàng.
Trang 104.4.
Phương pháp: Đọc các tài liệu chính thức từ nhà phát triển của
framework Tham khảo tài liệu, mô hình của các nghiên cứu đã được
triển khai trước đó Triển khai thực nghiệm hệ thống.
Xây dựng hệ thống dựa trên mô hình Serverless hỗ trợ phát triển cácphần mềm lượng tử
Mục tiêu: Lập trình các chức năng quản lí, hỗ trợ tự động triển khai phầnmềm lượng tử
Phương pháp: Áp dụng các công nghệ, kỹ thuật trong việc phát triểnphần mềm truyền thống như quản lí phiên bản mã nguồn, đóng gói ứng
dụng container, tự động hóa quy trình (DevOps).
Đánh giá hiệu quả, chức năng của hệ thống đã triển khai
Mục tiêu: Đánh giá hiệu quả, hiệu suất và phân tích các chức năng của
hệ thống trên nhiều ngữ cảnh và chứng minh khả năng ứng dụng thực tếcủa đề tài trong việc phát triển phần mềm lượng tử
Thời gian Nội dung công việc
3/1—31/1/2022_ | Tìm hiểu, lựa chọn dé tài và xây dựng dé cương chỉ tiết
1/2 - 28/2/2022
Nghiên cứu về phát triển ứng dụng lượng tử, lý thuyết về
lượng tử
Tìm hiểu, phân tích các nghiên cứu liên quan và xây dựng báo
cáo tổng quan tình hình nghiên cứu
Trang 11Tim hiểu và thiết kế mô hình sơ bộ các thành phan can thiết
Hoàn thiện các chức năng quản lí ứng dụng lượng tử trên hệ
1⁄4—30/4/2022 | thông
Kiểm thử và tối ưu hóa các chức năng của hệ thống
Đánh giá kết quả và đưa ra kết luận về tính ứng dụng của hệ
15 — 31/5/2022 thống đã triển khai trong việc phát triển các ứng dung lượng tử
Tổng hợp kết quả và số liệu thực nghiệm và viết báo cáo khoá
Trang 12[4] J Garcia-Alonso, J Rojo, D Valencia, E Moguel, J Berrocal, and J M Murillo,
“Quantum Software as a Service Through a Quantum API Gateway,” IEEE Internet
Comput., vol 26, no 1, pp 34-41, 2022, doi: 10.1109/MIC.2021.3132688.
[5] S Eismann et al., “Serverless Applications: Why, When, and How?,” IEEE Softw.,
vol 38, no 1, pp 32-39, 2021, doi: 10.1109/MS.2020.3023302.
Xác nhận của CBHD TP HCM, ngày tháng năm
Sinh viên 1 Sinh viên 2
TS Phạm Văn Hậu Phạm Ngọc Tâm Đoàn Thanh Phương
Trang 13Mục lục
Mục lục xi
Danh sách hình vẽ xiv
Danh mục từ viết tắt xviii
1 MỞĐẦU 1
11 Giớithệu Q0 eee 1
12 Mục tiêu nghincứu 2
1.3 Đối tượng nghiên cứu và phạm vi nghiêncứu 2
1.4 Cấu trúc Khóa luậntốtnghệp - 3
2 CƠ SỞ LÝ THUYẾT VÀ CÁC NGHIÊN CỨU LIEN QUAN 4 2.1 Tính toán lượng tử (Quantum computing) 4
2.1.1 Bit và tính toán truyền thống (classical computing) 4
2.1.2 Cosétofnhoc 2.2.02 sa 5 2.1.3 Qubit và tính toán lượng tử (quantum comuting) 6
2.1.4 Một số cổng lượngtỬ 9
2.1.5 Mạch lượng tử (Quantum circuis) 13
2.1.6 Các thuật toán lượng tử phổbiến 14
2.1.7 Thách thức hiện tại của tính toán lượngtử 20
2.2 Phát triển ứng dụng lượngtử 21
2.2.1 Các SDKs và ngôn ngữ lập trình lượng tử phổbiến 21
2.2.2 Cac ứng dụng truyền thống kết hợp lượng tử 23
xi
Trang 142.2.3 Quy trình phát triển ứng dụng lượngtửỬ 24
2.3 Mô hình tính toán lượng tử không máy chủ 26
2.3.1 Mô hình điện toán không máy chủ 26
2.3.2 Các nền tảng điện toán không máy chủ phổbiến 27
2.3.3 Ứng dụng mô hình điện toán không máy chủ cho phát triển ứng dụng lượngtỬ 29
2.4 Các nền tảng công nghệ liên quan - 30
2.4.1 Docker va Kubernetes - 30
24.2 Gitlab aaa ad 32 2.4.3 ReactlS 2 ee 33 2.4.4 FastAPl g7: cp 34
2.5 Các nghiên cứu lên quan 34
PHAN TÍCH THIẾT KẾ HỆ THONG 37 3.1 Phân tích các yêu cầu phát triển hệthống - 37
3.2 Mô hình kiến trúc hệthống - 38
3.3 Các thành phần chính của hệ thống 39
3.4 Mô hình luồng dữ liệu 4I 3.4.1 Nhóm phát triển ứng dụng lượngtử 41
3.4.2 Người dùngcuối Ặ QC 43 XÂY DUNG VÀ TRIỂN KHAI HỆ THONG 44 41 Xây dựng BackendAPI 44
4.2 Xây dựng giao diện người dùng (UI) 46
4.3 Tích hợp xác thực bảo mật và phân quyền người dùng 47
44 Tíchhợp đóng góiứngdụng 51
4.5 Tích hợp các bộ giả lập lượng tử va máy tính lượng tử 5
4.6 Tích hợp theo dõi hệthống 53
4.7 Triển khai các thành phan chính của hệthống 55
4.71 Triển khaiKubernetes 55
xI
Trang 154.7.2 Triển khaiOpenFaaS cốc 56
4.7.3 Triển khai Gilab và CU/CD 57
4.74 Triển kha UlvaBackend 60
4.7.5 Triển khai GateWay ee 62 5 THỰC NGHIỆM VÀ ĐÁNH GIÁ KET QUA 65 5.1 Môi trường thựcnghệm 65
5.2 Xây dựng và triển khai ứng dụng lượng tử 65
5.2.1 Sử dụng Qiskit và bộ giả lập lượng tử củalBM_ 66
5.2.2 Sử dụng Cirq và bộ giả lập lượng tử của Google 69
5.2.3 Sử dụng Qsharp và bộ giả lập lượng tử Microsoft 72
5.3 Sử dụng ứng dụng lượngtỬ 72
5.3.1 Sử dụng ứng dụng lượngtử 74
53.2 Xoáứng dụng lượngtỬ 78
5.3.3 Chỉnh sửa ứng dụng lượngtử 80
5.4 Quanlivatheo dõihệthống - 82
54.1 Quảnlýhệthống c cố eee 82 5.4.2 Theoddihéthéng 0.000.000 ee 82 5.5 Đánh giá hiệu suất hệ thống - 84
5.5.1 Kịch ban 1: Thời gian phản hồi với số lượng người dùng kết nối cùng lúc khác nhau - 84
5.5.2 Kịch ban 2: So sánh thời gian phản hồi các SDKs và ngôn ngữ dựa trên số lượng qubit - 87
6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIEN 89 S.‹ 5 =.a aaẼ 89
6.2 Huéngphattrién 2 eee 89
Tài liệu tham khảo 9
xiii
Trang 16Danh sách hình vẽ
2.1 BangmaASCIL 1 0 02.0002 eee 5
2.2 Machcong Half-Adder 5
2.3 Biéudiénvitrixe ee 72.4 Mô phỏng trạng thái qubit trước và sau khi áp dụng céng xX 102.5 Mô phỏng trang thái qubit trước và sau khi áp dụng cổng YY 112.6 Mô phỏng trạng thái qubit trước và sau khi áp dụng c6éngZ 12
2/7 Cấu trúc mạch lượngtỬ 14
2.8 Mạch cộng lượngtỬ Ặ QQ Q eee 14
2.9 Mạch cộng lượngtử[l] 15
2.10 Mach lượng tử thuật toán Deutsch-Jozsa’s 16
2.11 Mô phỏng biên độ sau khi khởi tạo trong thuật toán Grover 18
2.12 Mô phỏng biên độ sau khi áp dụng toán tử Oracle trong thuật toán
TOVT Q Q Q Q ee 18
2.14 Mô phỏng chu kỳ lặp lại của hàm số a'(modN) 19
2.15 Mô phỏng mạch lượng tử trong thuật toán Shor 20 2.16 So sánh giữa các SDKs, ngôn ngữ lập trình lượng tử 21
2.17 Quy trình phát triển ứng dụng lượng tử áp dụng DevOps 1 [2] 25
2.18 Quy trình phát triển ứng dụng lượng tử kết hợp áp dụng DevOps 2 [3] 262.19 Sơ đồ giao tiếp giữa các thành phan trong OpenFaaS 282.20 Mô hình các thành phần trong Kubernetes 30
2.21 So sánh các tính năng của QDev với các nghiên cứu liên quan 34
3.1 Mô hình tổng quanhệthống - 383.2_ Mô hình luồng dữ liệu trong hé thống - 42
XIV
Trang 17in
>
®
iN + Cm UDA WR WL
eS =
in
+ aA aA ® 0®
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
So đồ tổng quát của các mô-đun trong Backend_ 44
JWT Token 2 Q Q Q Q Q HQ HS 48 Cấu tric JWT Token 22 ee 48 Cơ chế hoạt động cbaJWT 2 eee 49 Giao diện đăng nhập hệ thống - 50
Luu trữ JWT token ở localstorage - 50
Danh sách các máy tính lượng tử vật lý do IBM Quantum cung cấp 54
Danh sách các máy tính mô phỏng lượng tử do IBM Quantum cung cấp 54 Giao diện bảng điều khiển giám sát hệ thống của Grafana 55
Kết quả sau khi triển khai Kubernetes 56
Giao diện người dùng của Gitlab 58
Kết quả sau khi cầu hình Runner cho Gilab_ 58
Kết quả sau khi cau hình biến môi trường cho Gilab 59
Giao diện quản lý các pipeline CI/CD trên Gilab 59
Email tự động nhận được sau khi hoàn thành một pipeline C/CD 62
Cầu hình DNS cho các thành phan trong hệ thống 63
Chuẩn bị yêu cầu và gửi đến API tạo ứng dụng G7 Hệ thống thực hiện quy trình DevOps 67
Các ứng dung lượng tử đã được triển khai trên hệ thống Serverless 68
Kết quả nhận được sau khi triển khai ứng dụng lượng tử bằng API 68
Giao diện trang khởi tạo ứng dụng 69
Giao diện Editor trong trang khởi tạo ứng dụng lượng tử Qiskit 70
Giao diện chờ phản hồi sau khi khởi tao ứng dụng lượng tử Qiskitmới 70 Giao diện quản ly ứng dụng lượng tử 71
Giao diện chon mẫu ứng dung lượng tử Cirq khi khởi tạo 71
Giao diện chờ phản hôi sau khi khởi tao ứng dung lượng tử Cirg bằng
XV
Trang 18Wm nA MH oO mn ©ö
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
5.32
5.33
Giao diện chờ phan hôi sau khi khởi tao ứng dụng lượng tử Cirq bằng
Giao diện triển khai ứng dụng lượng tử sử dụng Q# trên UL
Giao diện editor của tập tin handler.qs khi triển khai ứng dụng lượng 789 -ằẰẮẶ ằ a ee Giao diện kết quả sau khi triển khai ứng dụng lượng tử sử dụng Q# Chuẩn bị yêu cầu đầu vào gửi đến API để sử dụng ứng dụng lượng tử Kết quả trả về từ API khi sử dụng một ứng dụng lượng tử
Giao diện trang sử dụng ứng dụng
Kết quả trả về sau khi gửi yêu cầu
Gửi yêu cầu dưới dạng JSON
Chuẩn bị yêu cầu và gửi đến API để xoá ứng dụng
Kết quả trả về từ API khi xoá ứng dụng
Giao diện trang quản ly cic ting dung
Kết quả trả về sau khi gửi yêu cầu
-Chuẩn bị yêu cầu và gửi đến API để chỉnh sửa ứng dụng
Kết quả trả về từ API khi chỉnh sửa ứng dụng
Giao diện trang quản lý các ứng dụng
Kết quả trả về sau khi gửi yêu cầu
Giao diện quan lý Deployment trên ứng dụng Lens
Giao diện quản lý Ingress trên ứng dụng Lens
Giao diện theo dõi và giám sát tài nguyên của hệ thống
Giao diện theo đõi và giám sát tài nguyên của từng ứng dụng bên trong hệ thống SE ee Biểu đồ thời gian phản hồi của các SDKs và ngôn ngữ với số lượng người dùng l,10,20 Ặ
Biểu đồ so sánh thời gian phản hồi của các SDKs và ngôn ngữ với số lượng người dùng 1, 10, 20 khi có scaling
Xvi
Trang 195.34 Biểu đồ thời gian phản hồi của các SDKs và ngôn ngữ với số lượng
qubit!],10,20 0.0 00.00.00 000000000000.
XVii
Trang 21CHƯƠNG1 MỞ ĐẦU1.1 Giới thiệu
Trong những năm gan đây, lĩnh vực máy tính lượng tử đã có nhiều bước đột phá cả
về phần cứng, phần mềm và thuật toán [4] Về phần cứng, Google đã phát triển thành
công máy tính lượng tử 53-qubits vào năm 2019! Năm 2021, IBM cũng cho ra mắt
máy tính lượng tử Eagle với 127 qubits [5] Bên cạnh những công ty lớn như IBM,
Google thì nhiều công ty mới như Rigetti và IonQ cũng đang chạy dua trong việc pháttriển các máy tính lượng tử quy mô lớn [6] Về phần mềm, các công ty công nghệcũng tập trung phát triển bộ công cụ phát triển phần mềm (SDKs) như Qiskit (IBM),Cirq (Google) và ngôn ngữ lập trình mới như Qsharp (Microsoft) giúp việc tiếp cận
và phát triển ứng dụng lượng tử nhanh chóng và dé dàng Về thuật toán, tính toánlượng tử có thể rút ngắn thời gian xử lý hơn rất nhiều lần so với máy tính toán truyền
thống với các thuật toán như: phân tích thừa số nguyên tố lớn với thuật toán Shor [7],
thuật toán tìm tính chất hàm Deutsch-Jozsa [8] và thuật toán tìm kiếm Grover [9]
Tuy nhiên, việc phát triển các ứng dụng lượng tử vẫn còn đối mặt với nhiều tháchthức Đầu tiên, các máy tính lượng tử hiện nay vẫn còn hạn chế về số lượng qubits(quantum bits) ở mức thấp và trung bình, kết quả xử lý chưa ổn định hay được biếtđến là vấn đề NISQ (noisy intermediate-scale quantum) [4] Các ứng dụng trên máy
tính truyền thông hiện nay rất phổ biến, việc thay thế hoàn toàn bằng công nghệ lượng
tử sẽ gây ra những quyết định khó khăn cho doanh nghiệp [10] Phát triển ứng dụnglượng tử là một lĩnh vực còn rất mới, tạo ra nhiều khó khăn và thách thức đối với
những kỹ sư phát triển phần mềm truyền thống [11]
Serverless computing (mô hình điện toán "không máy chủ") có thể là giải pháp
tiềm năng để khắc phục các thách thức mà phát triển ứng dụng lượng tử đặt ra.
Serverless computing được xem như là lớp dịch vụ trung gian giữa con người và
điện toán đám mây, hỗ trợ quản lí hạ tầng máy chủ trong khi đó người dùng có thể
"https://quantumai.google/learn/map
Trang 22tập trung vào phát triển và triển khai ứng dụng của mình [12] Ngoài ra, mô hìnhserverless computing còn có thể giúp giảm chỉ phí, tối ưu hóa phân bổ tài nguyên và
khả năng mở rộng [13].
Trong khóa luận này nhóm tác giả sẽ triển khai hệ thống tự động hoá quy trình
phát triển phần mềm lượng tử theo mô hình Serverless computing Hệ thống cung cấpmột nền tảng hỗ trợ các lập trình viên phát triển phần mềm lượng tử nhanh chóng, tựđộng mà không cần quan tâm đến việc cài đặt máy chủ và các dịch vụ cần thiết Đồngthời hệ thống cũng giúp người dùng dễ dàng tiếp cận và sử dụng các ứng dụng lượng
tử qua giao diện trực quan, tiện lợi.
1.2 Mục tiêu nghiên cứu
* Nghiên cứu về các kỹ thuật lập trình, lý thuyết cơ bản về lượng tử và các thưviện mã nguồn mở hỗ trợ lập trình ứng dụng lượng tử
» Nghiên cứu áp dụng mô hình điện toán không máy chủ vào triển khai ứng dung
lượng tử.
* Xây dựng hệ thống dựa trên mô hình điện toán không máy chủ hỗ trợ phát triển
các ứng dụng lượng tử.
» Đánh giá tính hiệu quả, chức năng của hệ thống và chứng minh khả năng ứng
dụng thực tế của đề tài trong việc phát triển phần mềm lượng tử
1.3 Đối tượng nghiên cứu và phạm vỉ nghiên cứu
* Lý thuyết cơ bản, các kỹ thuật lập trình phần mềm lượng tử
* Các framework triển khai mô hình Serverless cloud computing
» Nghiên cứu sử dụng các dịch vụ máy tính lượng tử của nhà cung cấp IBM
Quantum
* Các kỹ thuật, giải pháp phát triển phần mềm truyền thống cho phát triển phần
mềm lượng tử
Trang 231.4 Cấu trúc Khóa luận tốt nghiệp
Phần còn lại của Khóa luận tốt nghiệp được trình bày theo trình tự sau: nhóm tác
giả sẽ trình bày cơ sở lý thuyết và các nghiên cứu liên quan ở Chương 2 Ở Chương
3, nhóm tác giả tiến hành phân tích và thiết ké mô hình kiến trúc hệ thống, cách triển
khai cũng như cách thức hoạt động được trình bay ở Chương 4 Sau đó, ở Chương 5
nhóm tác giả đặt ra các kịch bản thực nghiệm để đánh giá tính hiệu quả và hiệu suất
của hệ thống Cuối cùng, nhóm tác giả đưa ra kết luận và hướng phát triển của đề tài
trong tương lại tại Chương 6.
Trang 24CHUONG 2 CƠ SỞ LÝ THUYET VÀ CÁC NGHIÊN
CỨU LIÊN QUAN
2.1 Tính toán lượng tử (Quantum computing)
Trước khi tìm hiểu về tính toán lượng tử và các khái niệm liên quan, nhóm tác giảtóm tắt sơ lược về cách các máy tính hiện nay biểu diễn thông tin
2.1.1 Bit và tính toán truyền thống (classical computing)
Trên các máy tính truyền thống, mọi thông tin được biểu diễn dựa trên bit, trong
đó mỗi bit tồn tại ở một trong hai trạng thái, 0 và 1 Ví dụ đơn giản là sử dụng hệ nhị
phân biểu diễn các chữ số thập phân 0, 1, 2, 3, 4, 5, 6, 7, 8 và 9 bằng cách sử dụng
các kí tự 0 và 1 để biểu diễn các số như là bội số của 2 Ví dụ nhị phân của số 9213 là
kí tự đặc biệt Tóm tắt bảng mã được mô tả ở hình 2.1 Từ đó, mọi thông tin trên máytính như chữ số, kí tự, hình ảnh, âm thanh phức tạp hơn đều được biểu diễn dựa trên
các quy ước này.
Ngoài biểu diễn thông tin, các chương trình máy tính, các phép toán đều được xâydung và thực hiện dựa vào bản chất bên dưới là các sơ đồ mach (circuit diagram) Cácmạch này có đầu vào bên trái và bên phải là các bit, ở giữa sẽ thực hiện các phép biến
Trang 25Nhị phân Kí tự Nhị phân Kí tự Nhị phân Kí tự
nguyên tử (molecule simulation), xử lý các mô hình máy học phức tạp, phân tích thừa
số nguyên tổ lớn, phát sinh số hoàn toàn ngẫu nhiên (truly-random)
2.1.2 Cơ sở toán học
Không gian Hilbert là một trong những cấu trúc toán học quan trọng nhất trong cơ
học lượng tử và tính toán lượng tử Một không gian Hilbert có thể được coi là không
gian trang thái trong đó tat cả các vectơ trạng thái lượng tử "live" Sự khác biệt chính
Trang 26giữa không gian Hilbert và bất kỳ không gian vectơ ngẫu nhiên nào là không gian
Hilbert mang một giá trị bên trong, là một kết quả có thể được thực hiện giữa hai
vectơ và trả về kết quả vô hướng
"Trong cơ học lượng tử và tính toán lượng tử, giá trị bên trong giữa hai vectơ trạng
thái trả về một đại lượng vô hướng biểu thị số lượng mà vectơ thứ nhất nhân tương ứngvới các phan tử trong vectơ thứ hai Từ đó, xác suất đo lường ở các trạng thái lượng tử
khác nhau có thể được tính toán
Cho hai vectơ |a) va |b) trong không gian Hilbert, biểu thi giá trị là (z|b), trong
đó (a| bằng với chuyển đổi liên hợp của |a), ký hiệu |a)† Do đó, kết quả giá trị của
hai vectơ của không gian Hilbert được mô tả như trong công thức 2.2.
(alb)=(aj aj a )] |=AiBitajbs+ tagjbm 22)
Một trong những điều kiện quan trong nhất đối với không gian Hilbert đại diện
cho một hệ thống lượng tử là tích vô hướng của một vectơ với chính nó bằng một:(ự | w) = 1 Đây là điều kiện được gọi là điều kiện chuẩn hóa, với chiều dài của vectơ
bình phương bằng một Ý nghĩa vật lý của điều này là độ dài của một vectơ theo một
hướng cụ thể là đại điện cho biên độ xác suất của hệ thống lượng tử liên quan đến đo
lường ở trạng thái cụ thể đó
2.1.3 Qubit và tính toán lượng tử (quantum comuting)
Tinh toán lượng tử được xây dựng dựa trên nền tảng của cơ học lượng tử (quantum
mechanics), vốn là lý thuyết vật lý phản ánh bản chất của thế giới vật chất ở mức độ
nguyên tử và phân tử [14] Trên máy tính lượng tử, thông tin được biểu diễn dựa trênđơn vị là qubit Tương tự với bit, qubit chỉ có thể lưu trữ được giá trị là “0” và “1” và
Trang 27Hình 2.3: Biểu diễn vị trí xe
cho ra duy nhất một giá trị “0” hoặc “1” khi đo lường (measurement) thông tin từ nó.Tuy nhiên, đặc điểm quan trọng của qubit so với bit truyền thống là nó có thể tồn tại
ở trạng thái “chồng chập lượng tử” (superposition) Ở trạng thái này, mỗi qubit có thể
cùng mang hai giá tri “0” và “1” tai cùng một thời điểm Ví dụ, với 8 bit thông thường
có thể biểu diễn được bat kì một số thập phân có giá trị từ 0 đến 255, trong khi đó 8
qubit có thể mang trạng thái superposition với toàn bộ 256 giá trị trong cùng một thời
điểm Từ các tính chất của qubit có thể tạo ra nhiều cổng luận lý và thuật toán mới
với tốc độ tính toán nhanh hơn đáng kể so với tính toán truyền thống Cách biểu diễn
qubit:
+ Vector trạng thai (statevectors)
Trong tính toán, vector thường được dùng để biểu diễn phương, chiều va độlớn của đại lượng như gia tốc, vận tốc và các đặc tính khác tùy vào mục đích sử
dụng, các vector dùng để biểu diễn trạng thái có thể được gọi là các statevectors
Ví dụ trong hình 2.3, tại vị trí đặt xe có thể đánh dấu là 1, ngược lại các vi tríkhác sẽ được đánh dấu là 0 Vậy vector trạng thái x của vị trí đặt xe có thể được
biểu diễn như sau 2.7:
ix) = lo (2.3)
Trang 28Tắt cả các trạng thái phức tạp khác của qubit đều có thể biểu diễn bằng hai trạng
thái cơ bản |0) và |I) Ví dụ, trạng thái |qo) có thể biểu diễn như sau:
sau:
Trong đó a, b là hai số phức và thoả mãn điều kiện 2.8, ||ø||? va ||b||? là xác suất
đo lường được trạng thái |0) và |1) của qubit |Ự).
|la|Ứ + I|b|Ứ = ! (2.8)
Trang 29Một tính chat quan trọng khác của qubit đó là sự “vướng víu lượng tử” (entanglement).
Tính chất này thể hiện mối liên hệ chặt chẽ giữa hai qubit, tức khi biết được
trạng thái của qubit này thì có thể xác định được trạng thái của qubit kia mặc
cho khoảng cách giữa chúng là rất xa Trạng thái “vướng víu” có thể tạo ra bằng
cách áp dụng cổng CNOT 2.24
Do lường (measurement) giá trị của trạng thái qubit là xác định khả năng, xác
suất có được trạng thái |x) của một trạng thái |), trong đó, |x) có thể là bất kì
trạng thái nào Xác suất này được tính bằng cách lấy nhân vô hướng của vector
trang thái |x) và vector trang thái |y), sau đó lấy bình phương độ lớn
p(*)) = |&lw) (2.9)
Xét ví dụ 2.6, khi do lường trạng thái |0) kết quả xác suất là 2.
1).0 (2.10)
2.1.4 Một số cổng lượng tử
“Trên máy tính lượng tử, để thực hiện phép toán lượng tử trên qubit sẽ cần áp dụng
các cổng lượng tử tương tự như cách áp dụng các cổng trên máy tính truyền thống như
AND, OR, XOR va NOT trên các bit truyén thống Có thể chia thành hai loại chính
là cổng đơn qubit và cổng đa qubit:
* Cổng don qubit (Single-qubit gates) là cổng lượng tử áp dụng đồng thời cho
duy nhất một qubit bao gồm nhiều loại:
Trang 30— Cổng X: là cổng được đại điện bởi ma trận Pauli-X như sau:
0 1
øy=X= = |0)(1) +|1) (0| 2.11)
Cổng X giống với cổng NOT trên máy tính truyền thống vì nó làm thay đổi
biên độ của trạng thái qubit |0) và |1), hình 2.4 mô phỏng trạng thái qubit
trong không gian 3 chiều
Hình 2.4: Mô phỏng trạng thái qubit trước và sau khi áp dụng cổng X
- Cổng Y: là cổng được đại điện bởi ma trận Pauli-Y như sau:
0 -i
oy =Y= = —i|0)(1| +i|1) (0| = i.oy.oz (2.14)
i 0
Cổng Y cũng tương tự như cổng X nhưng nó xoay qubit quanh trục Y trong
không gian một góc bằng Z, hình 2.5 mô phỏng trang thái qubit trongkhông gian 3 chiêu
10
Trang 31a0) jo)
x x tan
Ù )Hình 2.5: Mô phỏng trạng thái qubit trước và sau khi áp dụng cổng Y
— Cổng Z: là cổng được đại diện bởi ma trận Pauli-Z như sau:
0
oz =Z= = |0)(0| —|1)(1| (2.15)
Cổng Z làm cho xoay qubit quanh trục Z trong không gian một góc bằng z,
tuy nhiên sé không làm thay đổi trạng thái |0) và |1) của qubit mà sẽ làmthay đổi pha của nó giữa |+) và |—), hình 2.6 mô phỏng trạng thái qubit
trong không gian 3 chiều
=f OP ty et] fan eto
- Cổng Hadamard (H): là cổng tạo ra sự chồng chập trạng thái |0) và |1)
cho qubit Cổng H được thể hiện bởi ma trận sau:
J1! 1 1
H= = ;(0)(0|+|0)(1I+|1(0|—|D@J) 18)
Cổng H làm thay đổi trạng thái qubit như công thức dưới đây, hình 2.6 mô
11
Trang 32Hình 2.6: Mô phỏng trạng thái qubit trước và sau khi áp dụng cổng Z
phỏng trạng thái qubit trong không gian 3 chiều
(0-0-2) e® sin(Ø/2) e^*!? cos(@/2)
Chúng ta có thể thấy mọi cổng ở trên đều có thể tạo ra khi thay đổi các giátrị Ø, ở và A, ví dụ như cổng H:
12
Trang 33(control), qubit còn lại đóng vai trò là mục tiêu (target) Điều này có nghĩa làqubit mục tiêu sẽ thay đổi trạng thái nếu qubit điều khiển có trang thái là |1) vakhông thay đổi nếu trạng thái của nó là |0) Cổng CNOT biểu diễn dưới dạng
ma trận tuỳ thuộc vào qubit nào là qubit điều khiển và qubit mục tiêu có hai
dang:
1000 1000
0001 0100 CNOT = ,CNOT = (2.23)
0010 0001
0100 0010
Cổng CNOT có thể tạo ra trạng thái vướng víu (entangled) lượng tử khi áp dung
vào qubit có trạng thái |(0+) Được mô tả
CNOTI0+) = -5(I00) + |11)) (2.24)
2.1.5 Mach lượng tử (Quantum circuits)
Tương tự với máy tính truyền thống, máy tính lượng tử sử dung các mạch lượng
tử để thực hiện các phép tính toán Xây dựng một mạch lượng tử gồm 3 bước chính,
hình 2.7:
+ Bước 1: Xử lí đầu vào Đây là bước cơ bản khi bắt đầu xây dựng một lượng tử,
bước này quyết định giá trị khởi tạo đầu tiên của qubit đầu vào
» Bước 2: Thực hiện các phép tính Sử dụng các cổng lượng tử thực hiện các
phép toán và biến đổi trang thái các qubit
+ Bước 3: Do lường kết quả Trạng thái qubit luôn thay đổi do đó cần xác định
giá trị của từng qubit
Xét ví dụ mạch lượng tử cộng có nhớ được mô tả hình 2.8 với đầu vào 4 qubits Ở
bước xử lí đầu vào mạch sử dụng cổng X ở qo va qi để chuyển đổi trạng thái |0) thànhtrạng thái |1) (qubit mặc định đầu vào ở trạng thái |0) Dựa vào bảng sự thật của bài
13
Trang 34Do operations
on bits
impor TC
Extract
Hình 2.7: Cau trúc mach lượng tử
toán 2.9, ý tưởng là với hai đầu vào giống nhau thì đầu ra sẽ luôn là 0 và ngược lạikhác nhau thì dau ra là 1 Do đó ở phần thứ hai, các cổng CNOT được sử dụng ở cặp(40.42) và (1,92), néu qo và qi giống nhau 4s sẽ có giá trị là 0 Tiếp theo, số nhớ sẽ
bằng 1 khi go và z¡ cùng bằng 1, tại đây cổng Toffoli (tương tự như CNOT nhưng có
2 qubit điều khiển) được áp dụng cho (qo, ¡, đ3), kết quả gz sẽ là bit nhớ cuối cùng
qo
qd
q2
q
2.1.6 Các thuật toán lượng tử phổ biến
1 Thuật toán Deutsch-Jozsa
Bài toán Deutsch-Jozsa [8] đặt ra là với một ham f(x) cho trước thì hàm đó làbên bat biến (constant) hay cân bằng (balanced).
14
Trang 35Input1 | Input2 | XOR Output
* Phương pháp truyền thong:
— Trường hợp tốt nhất: Trong hai lần thử, lần thứ nhatf(x) cho ra 0 và
lần thứ hai cho ra 1 vậy có kết thể kết luậnƒ(x) là hàm cân bằng.
— Trường hợp xấu nhất Trong trường hợp xấu hơn, phải thử chính xác
một nửa tất cả số lần thử để có thể xác định được f(x) là bất biến
— Theo xác suất thì số lần thử càng tăng, tỷ lệ dự đoán chính xác càng
cao
P()=1—1/2”1, (1<k <2") (2.25)
Từ xác suất trên có thể kết luận độ phức tạp của bài toán này là O(n)
* Phương pháp ứng dung tính toán lượng tử:
Máy tính lượng tử có thể xác định đúng f(x) là bền vững hay cân bằng chỉ trong một lần thử, nói cách khác độ phức tap của bai toán là O(1) Ý tưởng
chính của thuật toán là ứng dụng tính chất chồng chập lượng tử của qubit
Thuật toán được mô ta ở hình 2.10.
Trang 36Hình 2.10: Mạch lượng tử thuật toán Deutsch-Jozsa’s
Xây dựng thuật toán gồm các bước:
— Bước 1: Thiết lập đầu vào N-qubit đầu vào đầu tiên được thiết lập ở
trạng thái |0) và một qubit ở trang thái |1).
Trang 37— Bước 4: Áp dụng cổng Hadamard cho n đầu vào đầu tiên
qubits đầu tiên là |0)S" = |3; #2 ạ'(—1)/0)2:
* Xác suất luôn bằng 0 nếu f(x) là hàm cân bằng, kết quả đầu ra là
111.11.
+ Xác suất luôn bang | nếu f(x) là hàm bất biến, kết qua dau ra là
000 00.
2 Thuật toán Grover
Thuật toán được Lov Kumar Grover giới thiệu vào năm 1996 [9] Thuật toán
Grover ứng dụng máy tính lượng tử để tìm kiếm trên cơ sở dữ liệu chưa được
sắp xếp gồn N phan tử chưa sắp xếp Thuật toán tìm kiếm trên với độ phức tạp chỉ là O(./N) tương ứng với số lần lặp lại để tìm ra kết quả chính xác Thuật
toán thực hiện qua những bước sau:
* Bước 1: Tạo ra mạch với 2" qubit và áp dụng cổng # vào mỗi qubit bắt đầu
ở trạng thái |0)” Tại bước này biên độ của các giá trị được mô phỏng như
hình 2.11.
* Bước 2: Áp dụng toán tử Oracle để đánh dấu các phần cần tìm trong số 2"
mục tiêu Toán tử Oracle sé áp dụng hệ số —1 cho những mục tiêu đượcđánh dấu kết quả như mô phỏng ở hình 2.12
* Bước 3:Sử dụng toán tử Diffusion để đảo ngược biên độ của tất cả các phần
tử về biên độ trung bình Sau khi thực hiện kết quả của biên độ của các giá
trị được mô phỏng như hình 2.13.
17
Trang 383 Thuật toán Shor’s
Thuật toán Shor được Peter Shor giới thiệu vào năm 1995 [7], ứng dụng máy
tính lượng tử để phân tích một số nguyên X thành hai số nguyên tố p,q sao cho
https://learn.qiskit.org/course/ch-algorithms/grovers-algorithm
18
Trang 39N = p.q Ung dụng của thuật toán này có thể phá được mã RSA do độ phức tạp
khi thực hiện trên máy tính lượng tử thấp
» Độ phức tạp trên máy tính truyền thống:
Hình 2.14: Mô phỏng chu kỳ lặp lại của hàm số a"(mod N)*
¢ Bước 1: Chọn một số a là sô nguyên tố cùng nhau với N Tức là tim số asao cho a và N có ước chung lớn nhất là 1
* Bước 2: Tìm giá trị r nhỏ nhất khác 0 sao cho a’ (mod N) = 1 Để tìm được
r nếu thực hiện trên máy tính truyền thống sẽ tốn thời gian rất lâu do độ
?https://Iearn.qiskit.org/course/ch-algorithms/shors-algorithm
19
Trang 40phức tạp lớn khi số N lớn Thuật toán Shor ứng dụng máy tính lượng tử đểgiải quyết vấn đề trên Bài toán tìm r thực chat là tìm chu kỳ lặp lại củahàm số ø"(mod N) như minh hoạ trong hình 2.14 Thuật toán tìm z trên máy
tính lượng tử được thực hiện với những bước chính sau Đầu tiên khởi tạo
các qubit, gán cổng H cho những qubits đầu tiên và cổng X cho qubit cuốicùng Sau đó áp dụng hàm luỹ thừa module và áp dụng biến đổi Fourier(QFT) Cuối cùng, đo lường qubit để lấy được kết quả r cần tìm Toàn bộquá trình biến đổi của qubit được mô phỏng trong hình 2.15
Hình 2.15: Mô phỏng mạch lượng tử trong thuật toán Shor:
* Bước 3: Kiểm tra kết quả r ở bước 2 sao cho r thoả điều kiện r là số chan
và x+ 1 # 0(modN) với x = a"/2(modN), nêu không thoả hai điều kiện
trên, ta cần thực thiện lại từ đầu với một giá trị a khác
« Bước 4: Tìm giá trị p,q dựa vào x với x = a’/?(modN), kết quả p,q cần
tim là ước chung lớn nhất của x + 1 với N và x— I với N
2.1.7 Thách thức hiện tại của tính toán lượng tử
Trong nghiên cứu [4], tác giả đã tóm tắt thực trạng của phần cứng lượng tử hiện
nay là "Noisy Intermediate-Scale Quantum (NISQ)” Các máy tính lượng tử vẫn có độ
nhiễu (noise) do các yếu tố môi trường Nói cách khác, kết quả sau khi do lường ở cáccổng lượng tử và qubit vẫn chưa hoàn toàn đạt độ chính xác tuyệt đối dẫn đến trong
3https://learn.qiskit.org/course/ch-algorithms/shors-algorithm
20