№ 1620Квантовые вычисленияУровень 2

Применить оракул инверсии цели как фазовый

Входы — оракул неизвестной булевой функции $f$ от $N$ битов и регистр запроса из $N$ кубитов в произвольном состоянии. Данный оракул инвертирует целевой кубит по правилу

$$|x\rangle|y\rangle\longmapsto|x\rangle|y\oplus f(x)\rangle.$$

Напишите операцию на языке Q#, меняющую знак амплитуды каждого $|x\rangle$ с $f(x)=1$. Обращаться к $f$ можно только через переданный оракул.

Подсказка источника: можно выделять вспомогательные кубиты. Какое их состояние поможет получить фазовый оракул из инверсии цели?

Заготовка Q#:

namespace Kata {
    operation ApplyMarkingOracleAsPhaseOracle(
        markingOracle : (Qubit[], Qubit) => Unit is Adj + Ctl,
        qubits : Qubit[])
    : Unit is Adj + Ctl {
        // Implement your solution here...

    }
}

Сообщить об ошибке

Войти, чтобы отправить материал.