Подготовить квантовый сигнал с двумя плюсами и двумя минусами
Вход — $n\ge2$ кубитов в $|0\ldots0\rangle$. Напишите операцию на языке Q#, подготавливающую периодическое состояние с чередованием знаков $1,1,-1,-1$:
$$\frac1{\sqrt{2^n}}\sum_{k=0}^{2^n-1}(-1)^{\lfloor k/2\rfloor}|k\rangle.$$
В развёрнутом виде первые слагаемые — $|0\rangle+|1\rangle-|2\rangle-|3\rangle$, последние — $-|2^n-2\rangle-|2^n-1\rangle$, с общим множителем $1/\sqrt{2^n}$. Например, при $n=2$ требуется $(|0\rangle+|1\rangle-|2\rangle-|3\rangle)/2$. Полная вспомогательная операция QFT, реализующая преобразование Фурье через библиотеку, дана в заготовке.
Заготовка Q#:
namespace Kata {
import Std.Arrays.*;
operation SquareWave(qs : Qubit[]) : Unit is Adj + Ctl {
// Implement your solution here...
}
// You might find this helper operation that implements QFT using a library operation useful.
operation QFT(qs : Qubit[]) : Unit is Adj + Ctl {
ApplyQFT(Reversed(qs));
SwapReverseRegister(qs);
}
}