# Qiskitのインストール !pip install qiskit # 作図に使用するpylatexencのインストール !pip install pylatexenc # ノイズの有無にかかわらず量子回路を実行するQiskit-Aerのインストール !pip install qiskit-aer # qiskitのインポート from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpile from qiskit_aer import AerSimulator from qiskit.visualization import plot_histogram # 4量子ビット(input、output)、 測定した結果は古典ビットを作成 A = QuantumRegister(1, "input_A") B = QuantumRegister(1, "input_B") after_A = QuantumRegister(1, "output_A") after_B = QuantumRegister(1, "output_B") cr_input = ClassicalRegister(2, "measurement_input") cr_output = ClassicalRegister(2, "measurement_output") qc = QuantumCircuit(A, B, after_A, after_B, cr_input, cr_output) # 入力値設定  アマダールゲートで重合わせとする qc.h(0) # 上から0ビット目 qc.h(1) # 上から1ビット目 # 回路     qc.barrier() # 回路中の区間で、見た目の区切りとコンパイル範囲の制御の両方の役割がある qc.cx(0,2) # CXゲート (0は制御ビット位置、2は標的ビット位置) qc.cx(1,2) qc.ccx(0,1,3) # CCXゲート (0と1は制御ビット位置、 3は標的ビット位置) qc.barrier() # 結果計測 qc.measure([0, 1, 2, 3], [0, 1, 2, 3]) # 左側の量子ビット(行列)の測定結果を右側の古典ビット(行列)に渡す shots = 1000 # 繰り返し実行回数 # おまじない(計算を実行して値を取得する。 ) simulator = AerSimulator() compiled_circuit = transpile(qc, simulator) job = simulator.run(compiled_circuit, shots=shots) result = job.result() counts = result.get_counts(compiled_circuit) # 画面表示内容 print(f"観測回数: {shots}回") for k, v in counts.items(): k1, k2 = k.split(" ") print(f"入力値: '{k2}', 出力値: '{k1}', 取得回数: {v}回, 確認: {k2[0]} + {k2[1]} = {k1}") import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 2, figsize=(20, 5)) # おまじない(作成した量子回路を画像で表示する。) qc.draw("mpl", ax=axes[0]) # 観測結果をグラフで表示 plot_histogram(counts, ax=axes[1])