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

Фазовый оракул числа семь

Вход — три кубита в произвольном состоянии $|x\rangle$, образующие регистр запроса.

Напишите операцию на языке Q#, меняющую знак базисного состояния $|111\rangle$ (число 7) и оставляющую остальные базисные состояния без изменения. Дополнительные кубиты выделять нельзя.

Примеры: для $|111\rangle$ измените знак; для $|010\rangle$ или $|101\rangle$ ничего не делайте.

Подсказка источника: какой однокубитный вентиль меняет знак $|1\rangle$, сохраняя $|0\rangle$? Как изменить его, чтобы знак менялся только для $|111\rangle$?

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

namespace Kata {
    import Std.Arrays.*;

    operation IsSeven_PhaseOracle(x : Qubit[]) : Unit is Adj + Ctl {
        // Implement your solution here...

    }
}