""" Реализация Квантового Преобразования Фурье (QFT) для произвольного числа кубитов n. """ import cirq import numpy as np # === Функция построения схемы QFT === def qft_circuit(n: int) -> cirq.Circuit: """Создаёт схему квантового преобразования Фурье (QFT) для n кубитов.""" qubits = [cirq.LineQubit(i) for i in range(n)] circuit = cirq.Circuit() # Для каждого кубита применяем Hadamard и контролируемые фазовые повороты for i in range(n): circuit.append(cirq.H(qubits[i])) for j in range(i + 1, n): angle = 1 / (2 ** (j - i)) circuit.append(cirq.CZ(qubits[j], qubits[i]) ** angle) # После всех поворотов меняем порядок кубитов на обратный for i in range(n // 2): circuit.append(cirq.SWAP(qubits[i], qubits[n - i - 1])) return circuit # === Главная функция === def main(): n = 4 # число кубитов input_state_str = "0111" print(f"=== Квантовое преобразование Фурье (QFT) для {n} кубитов ===") print(f"Исходное состояние: |{input_state_str}>") # --- Создаём кубиты --- qubits = [cirq.LineQubit(i) for i in range(n)] circuit = cirq.Circuit() # Переводим строку в установку нужных кубитов в |1> for i, bit in enumerate( reversed(input_state_str) ): # reversed, чтобы младший бит был справа if bit == "1": circuit.append(cirq.X(qubits[i])) # применяем оператор X (NOT) # --- Добавляем саму QFT --- circuit += qft_circuit(n) print("\nСхема:") print(circuit) # --- Симуляция --- simulator = cirq.Simulator() result = simulator.simulate(circuit) state = result.final_state_vector # --- Вычисляем фазы --- phases = np.angle(state) print("\n=== Результирующее состояние (амплитуды и фазы) ===") for i, (amp, phi) in enumerate(zip(state, phases)): if abs(amp) > 1e-9: # пропускаем элементы с амплитудой близкой к 0 print(f"|{i:0{n}b}>: amp={abs(amp):.3f}, phase={phi:.3f} rad") if __name__ == "__main__": main()