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

Оракул логического ИЛИ

Входы — регистр запроса из $N$ кубитов в произвольном состоянии $|x\rangle$ и целевой кубит в произвольном состоянии $|y\rangle$.

Напишите операцию на языке Q#, инвертирующую цель для каждого базисного состояния запроса, кроме $|00\ldots0\rangle$.

Примеры: для $|10000001\rangle$, $|11101101\rangle$ или $|0010101\rangle$ инвертируйте цель; для $|000\rangle$ ничего не делайте.

Перед реализацией ответьте: это оракул инверсии цели или фазовый оракул? Подсказка источника: здесь меняется состояние отдельной цели по состоянию запроса.

Ещё подсказка: можно безусловно инвертировать цель, затем снова инвертировать её только для нулевого запроса. Может пригодиться ApplyControlledOnInt.

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

namespace Kata {
    operation Or_Oracle(x : Qubit[], y : Qubit) : Unit is Adj + Ctl {
        // Implement your solution here...

    }
}

Предложить решение

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