The Atoms of Computation の通りだけど。
def add(a, b): qc = QuantumCircuit(4, 2) if a != 0: qc.initialize([0, 1], 0) if b != 0: qc.initialize([0, 1], 1) qc.cx(0, 2) qc.cx(1, 2) qc.ccx(0, 1, 3) qc.measure(2, 0) qc.measure(3, 1) results = sim.run(qc).result() return [int(c) for c in sorted(results.get_counts())[0]] for a in range(2): for b in range(2): c, s = add(a, b) num = 2*c + s assert num == a+b
X ゲートを使うほうが自然かもしれないけど、今回は QuantumCircuit.initialize
を使ってみた。よく考えると、確かに、入力で 2 qubits、出力用に別途 2 qubits 必要だから、計 4 qubits も食うんだな・・・。IBMQ が無料だと確か 5 qubits くらいしか使えなかった気がするから結構ギリギリ?
の部分が重要だな。