2개의 큐비트로 구성된 Transmon 에서 보았듯이 3개의 큐비트 시스템에서는 |000>, |001>, |010>,...|111> 처럼 8개중 3개로 구성된 질릴 정도의 텐서 곱 연산이 필요하므로 Transmon 에서의 알고리듬을 곱씹어 보되 정 필요하면 Gemini 에게 특정 명령 전후 큐비트 상태를 물어 모니터링 할 것을 추천한다.
Colab에서 Gemini가 짜준 아래의 코드를 실행해 보자. 8개의 객체 중 |111>을 검색하자. 코드 구조가 2 큐비트 시스템과 유사하므로 한번만 부호를 반전시켜 확률 진폭을 계산해 보면. 1024 회 실행 횟수에서 |111> 의 확률 값이 가장 높다는 것을 알 수 있다.
!pip install qiskit
!pip install qiskit-aer matplotlib
!pip install pylatexenc # histogram plot
from qiskit import QuantumCircuit
from qiskit_aer import Aer
from qiskit.visualization import plot_histogram
import numpy as np
# 3-큐비트 회로 생성
qc = QuantumCircuit(3)
# [단계 1] 초기 중첩 생성
qc.h([0, 1, 2])
qc.barrier()
# [단계 2] 오라클 (정답: |111>)
# 모든 큐비트가 1일 때 부호만 뒤집음 (MCZ 구현)
qc.h(2)
qc.mcx([0, 1], 2) # 0, 1번이 1일 때 2번을 반전(H와 함께 작용하여 Z효과)
qc.h(2)
qc.barrier()
# [단계 3] 확산 연산자 (Diffusion Operator)
qc.h([0, 1, 2])
qc.x([0, 1, 2])
# 3-큐비트용 MCZ (0, 1번이 1일 때 2번 위상 반전)
qc.h(2)
qc.mcx([0, 1], 2)
qc.h(2)
qc.x([0, 1, 2])
qc.h([0, 1, 2])
qc.barrier()
# 모든 큐비트 측정
qc.measure_all()
# 시뮬레이터 실행
backend = Aer.get_backend('qasm_simulator')
# 3개 큐비트에서는 1~2회 반복이 적당하지만, 여기서는 1회만 수행
result = backend.run(qc, shots=1024).result()
counts = result.get_counts()
print("측정 결과:", counts)


결과에서 확률 진폭 값을 관찰해 보면 |111> 이 80% 이며 나머지는 3.5% 이하로 축소되었음을 알 수 있다.
3-큐비트 구현의 주요 차이점을 살펴 보자.
MCZ 게이트 구현: Qiskit에는 mcz가 기본 게이트로 없을 때가 많아, qc.h(2) -> qc.mcx([0, 1], 2) -> qc.h(2) 조합을 사용한다. 이는 Z 게이트가 $H-X-H$와 같다는 원리를 이용해 Multi-Controlled X를 Multi-Controlled Z로 변환한 것이다.
반복 횟수 (Iterations): 2-큐비트에서는 1번만 돌려도 100% 정답이 나오지만, 3-큐비트(8개 항)에서는 수학적으로 약 2회 반복할 때 확률이 가장 극대화된다. 위 코드는 1회만 실행하므로 정답 확률이 약 80% 정도로 나온다.
오라클 범용성: 만약 정답이 |101|이라면, 0인 자리인 1번 큐비트 앞뒤에 qc.x(1)를 추가하여 |111|인 것처럼 속여서 계산하면 된다.
이 코드를 수정하여 2회 실행하려면 아래 부분을 추가로 셀에 넣어 실행하면 된다. 단 1회 실행에서 ac.measure_all() 에 의한 측정 이하 코드를 # 로 밀어 버린 후 맨 마지막에 넣어 주도록 한다.

가시적인 결과를 보도록 하자. 95.5%로 확률 진폭 값이 증가 되었으며 나머지는 모두 1.0& 이하로 진폭이 축소되었음을 알 수 있다.


첨부된 코드를 다운로드 받아 NDRIVE 에 업로드하여 실행해 보도록 하자.
'양자컴퓨팅 알고리듬' 카테고리의 다른 글
| 양자 알고리듬 두번째 관문 Grover Algorithm 2큐비트 |00>, |01>, |10>, |11> 예제 (0) | 2026.02.02 |
|---|---|
| 양자 알고리듬 첫번째 관문: Deutsch–Jozsa algorithm (0) | 2026.01.08 |