import sys, qiskit print(sys.version) print("qiskit version:", qiskit.__version__) 3.6.5 (default, May 11 2018, 04:00:52) [GCC 8.1.0] qiskit version: 0.5.4
from qiskit import ClassicalRegister, QuantumRegister from qiskit import QuantumCircuit, available_backends, execute, register, get_backend # import basic plot tools from qiskit.tools.visualization import plot_histogram, circuit_drawer
実装1
def toffoli1(c0, c1, t, q, qc): qc.h(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.t(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.t(q[c1]) qc.t(q[t]) qc.cx(q[c0], q[c1]) qc.h(q[t]) qc.t(q[c0]) qc.tdg(q[c1]) qc.cx(q[c0], q[c1]) q = QuantumRegister(3) qc = QuantumCircuit(q) toffoli1(0, 1, 2, q, qc) circuit_drawer(qc)
実装2
def toffoli2(c0, c1, t, q, qc): qc.h(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.t(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.tdg(q[c1]) qc.t(q[t]) qc.cx(q[c0], q[c1]) qc.h(q[t]) qc.tdg(q[c1]) qc.cx(q[c0], q[c1]) qc.t(q[c0]) qc.s(q[c1]) q = QuantumRegister(3) qc = QuantumCircuit(q) toffoli2(0, 1, 2, q, qc) circuit_drawer(qc)
実装3
def toffoli3(c0, c1, t, q, qc): qc.h(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.t(q[t]) qc.cx(q[c1], q[t]) qc.tdg(q[c1]) qc.tdg(q[t]) qc.cx(q[c0], q[t]) qc.cx(q[c0], q[c1]) qc.t(q[c0]) qc.tdg(q[c1]) qc.t(q[t]) qc.cx(q[c0], q[c1]) qc.s(q[c1]) qc.h(q[t]) q = QuantumRegister(3) qc = QuantumCircuit(q) toffoli3(0, 1, 2, q, qc) circuit_drawer(qc)
実装4
def toffoli4(c0, c1, t, q, qc): qc.h(q[t]) qc.tdg(q[c0]) qc.t(q[c1]) qc.t(q[t]) qc.cx(q[c0], q[c1]) qc.cx(q[t], q[c0]) qc.tdg(q[c0]) qc.cx(q[c1], q[t]) qc.cx(q[c1], q[c0]) qc.tdg(q[c0]) qc.tdg(q[c1]) qc.t(q[t]) qc.cx(q[t], q[c0]) qc.s(q[c0]) qc.cx(q[c1], q[t]) qc.cx(q[c0], q[c1]) qc.h(q[t]) q = QuantumRegister(3) qc = QuantumCircuit(q) toffoli4(0, 1, 2, q, qc) circuit_drawer(qc)
参考
クラウド量子計算入門―IBMの量子シミュレーションと量子コンピュータ, 中山 茂, ISBN-13: 978-4877834081