cirqで量子フーリエ変換(QFT)

$$
QFT |x> = \frac{1}{2^{n/2}} \sum_{y=0}^{2^n-1} e^{2 \pi iyx / 2^n} |y>
$$

$|x_1>$ = -H-CR2-CR3-..-CRn—————–
$|x_2>$ = ——————H-CR2–..———-
.
.
$|x_{n-1}>$ = ———————..–H-CR2—
$|x_n>$ = ————————-..——–H-

import cirq
import random
import matplotlib.pyplot as plt
import numpy as np
def make_qft(qubits):
    qreg = list(qubits)
    while len(qreg) > 0:
        q_head = qreg.pop(0)
        yield cirq.H(q_head)
        for i, qubit in enumerate(qreg):
            yield (cirq.CZ **(1 / 2 ** (i + 1)))(qubit, q_head)
qubits = cirq.LineQubit.range(4)
qft = cirq.Circuit(make_qft(qubits))
print(qft)
image.png