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

Различить Rz и R1 по управляемому повороту

Вход — операция, реализующая либо $R_z$, либо $R_1$. Её первый параметр — угол поворота в радианах, второй — кубит, как у стандартных операций Rz и R1 языка Q#:

$$R_z(\theta)=\begin{bmatrix}e^{-i\theta/2}&0\\0&e^{i\theta/2}\end{bmatrix},$$

$$R_1(\theta)=\begin{bmatrix}1&0\\0&e^{i\theta}\end{bmatrix}=e^{i\theta/2}R_z(\theta).$$

Напишите операцию на языке Q#, возвращающую 0 для $R_z$ и 1 для $R_1$.

Для операции определены обратный вариант Adjoint и управляемый вариант Controlled. Разрешено суммарно ровно одно обращение к переданной операции или её вариантам.

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

namespace Kata {
    import Std.Math.*;

    operation DistinguishRzFromR1(unitary : ((Double, Qubit) => Unit is Adj + Ctl)) : Int {
        // Implement your solution here...

        return -1;
    }
}

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

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