Различить 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;
}
}Предложить решение
Войти, чтобы отправить материал.