https://codeforces.com/contest/1115/problem/G1
$N$桁の量子状態$\ket{x}$とqubit$y$が与えられる。$\ket{y}$をオラクルqubitとして $$f\left( \vec{x} \right)=x_0 \land x_1 \land \cdots \land x_{N-1}$$ で定義されるオラクルを作成せよ。
この問題で作成するオラクルは、C-NOTゲートやCC-NOTゲートを制御bitの個数について一般化したものです。
Q#においては、Controlled functorをサポートしている演算に対してControlledを指定すると、制御qubit列$\ket{x}$の各桁のandが1の場合のみ作用する演算として扱うことができます。演算XはControlled functorをサポートしているので、Controlled Xを使えば求められている操作を実現できます。
これで、この問題が解けました。
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Solve (x : Qubit[], y : Qubit) : Unit {
body (...) {
Controlled X(x,y);
}
adjoint auto;
}
}