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

Оракул делимости двоичного числа на три

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

Напишите на языке Q# квантовый оракул для следующей функции.

$f(x)=1$, если целое число, записанное битовой строкой, делится на 3, и 0 иначе. Используйте порядок с младшим разрядом в x[0].

Например, при $N=3$ отмечаются $|000\rangle=|0\rangle$, $|110\rangle=|3\rangle$ и $|011\rangle=|6\rangle$.

На каждом базисном состоянии инвертируйте целевой кубит тогда и только тогда, когда $f(x)=1$, то есть реализуйте $|x\rangle|y\rangle\mapsto|x\rangle|y\oplus f(x)\rangle$. Регистр запроса должен сохранить исходное состояние. Решение должно работать на суперпозициях; измерения запрещены.

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

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

    }
}

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

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