らんだむな記憶

blogというものを体験してみようか!的なー

<QT> 量子半加算器

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 くらいしか使えなかった気がするから結構ギリギリ?

の部分が重要だな。