Оракул большинства единиц
Входы — регистр запроса из $N$ кубитов в произвольном состоянии $|x\rangle$ и целевой кубит в произвольном состоянии $|y\rangle$. Число $N$ равно 3, 5 или 7.
Напишите на языке Q# квантовый оракул для следующей функции.
$f(x)=1$, если большинство битов строки — единицы, и 0 иначе.
Например, при $N=3$ значения функции для $|001\rangle$ и $|000\rangle$ равны 0, а для $|101\rangle$ и $|111\rangle$ — 1.
На каждом базисном состоянии инвертируйте целевой кубит тогда и только тогда, когда $f(x)=1$, то есть реализуйте $|x\rangle|y\rangle\mapsto|x\rangle|y\oplus f(x)\rangle$. Регистр запроса должен сохранить исходное состояние. Решение должно работать на суперпозициях; измерения запрещены.
Заготовка Q#:
namespace Kata {
import Std.Math.*;
operation Oracle_Majority (x : Qubit[], y : Qubit) : Unit is Adj + Ctl {
// Implement your solution here...
}
}