Применить оракул инверсии цели как фазовый
Входы — оракул неизвестной булевой функции $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...
}
}Сообщить об ошибке
Войти, чтобы отправить материал.