量子コンピューティング向け言語Q#の問題集 QuantumKatas Superposition Task 15
Superposition Task 15は2日くらい悩んでやっとテストが通った。
Task 15は、次の入力状態からゴール状態を作る問題。
- 入力状態: N個の量子ビットの状態|0...0> (Nは2の冪乗とは限らない)
- ゴール状態: W stateという状態、すなわち、 (|10...0> + |010...0> + ... + |0...1>)/sqrt(N)
以下の写真の方針で考えました。
解答
// Task 15**. W state on arbitrary number of qubits // Input: N qubits in |0...0⟩ state (N is not necessarily a power of 2). // Goal: create a W state (https://en.wikipedia.org/wiki/W_state) on these qubits. // W state is an equal superposition of all basis states on N qubits of Hamming weight 1. // Example: for N = 3, W state is (|100⟩ + |010⟩ + |001⟩) / sqrt(3). operation WState_Arbitrary (qs : Qubit[]) : Unit { let N = Length(qs); Ry(2.0 * ArcCos(Sqrt(ToDouble(N - 1) / ToDouble(N))), qs[0]); for (i in 0..N-2) { (ControlledOnInt(0, Ry))(qs[0..i], (2.0 * ArcCos(Sqrt(ToDouble(N-i-2)/ToDouble(N-i-1))), qs[i+1])); } }