Определить частоту квантового сигнала
Вход — $n$ кубитов в состоянии
$$\frac1{\sqrt{2^n}}\sum_{k=0}^{2^n-1}e^{2\pi iFk/2^n}|k\rangle.$$
Напишите операцию на языке Q#, возвращающую частоту $F$, $0\le F\le2^n-1$.
Например, при $n=2$ для $(|0\rangle+i|1\rangle-|2\rangle-i|3\rangle)/2$ ответ равен 1.
Конечное состояние кубитов неважно. Полная вспомогательная операция QFT, реализующая преобразование Фурье через библиотеку, дана в заготовке.
Заготовка Q#:
namespace Kata {
import Std.Arrays.*;
operation SignalFrequency(qs : Qubit[]) : Int {
// Implement your solution here...
return -1;
}
// 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);
}
}