解説
問題 A4 の想定解法では量子ビット数 に対して量子回路の深さが となり、この問題を解くことができません。 さらに量子回路の深さを小さくするには、どのような量子回路を設計すれば良いのでしょうか?
問題 A4 にて学んだ「なるべく連続して同じ量子ビットに対して量子ゲートを作用させるのを避けること」をさらに適用する必要があります。
以下の 量子ビットの例を確認してみましょう。

このとき、量子回路上の境界線1によって分けられた各ブロックの操作はすべて異なる量子ビットに対して作用するため、同時に行うことができ、各ブロックの深さは になります。 すなわち、上記の量子回路の深さは となります。
以上の操作を一般化すると、量子回路の深さは となり、この問題を解くことができます。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit
import math
def solve(n: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.h(0)
for i in range(math.ceil(math.log2(n))):
for j in range(2**i):
if 2**i + j == n:
break
qc.cx(j, 2**i + j)
qc.z(0)
return qc
Footnotes
-
Qiskit では境界線 (
qc.barrier()
) が深さにカウントされてしまうため、提出するコードには含めないように注意して下さい。 ↩