自分用に作ったものですが、せっかくなので公開します。
本記事はClaudeに問題作成と検証を任せています。設問にミスがありましたらコメントまでお寄せください。
簡易Webアプリを作成しました
https://kuma-quant.github.io/qiskit-v2-cert-drill/
Qiskit v2.X Developer Associate 問題集(93問・全問解説付き)
はじめに
IBM Certified Quantum Computation using Qiskit v2.X Developer – Associate(試験コード: C1000-179)の対策として作成した練習問題集です。
- 全93問、Qiskit公式ドキュメント・APIリファレンス・OpenQASM 3公式仕様と照合済みです
- 8セクション(配点比率順: セクション3=18%, セクション1=16%, セクション4=15%, セクション5=12%, セクション6=12%, セクション2=11%, セクション7=10%, セクション8=6%)に沿って整理しています
- 各設問の解答・解説は折りたたみ表示になっています。まず自分で考えてから開いてみてください
- 解説には各選択肢が正しい/誤りである理由と、根拠となる公式ドキュメントへのリンクを添えています
- 本試験は68問・90分・合格ライン47/68(69%)です
セクション1: Perform quantum operations(配点16%)
Q1
SparsePauliOpで2量子ビット系の観測量「qubit1にZ、qubit0にX」を表す正しいラベルはどれか。
- A)
"ZX" - B)
"XZ" - C)
"Z*X" - D)
"X,Z"
解答・解説
答え: A
Qiskitのラベル表記は右端がqubit0に対応する(テンソル積を左からqubit_{n-1}⊗...⊗qubit0の順で並べる)。したがってqubit1=Z, qubit0=Xは左にZ・右にXを置いて"ZX"となる。
各選択肢について:
- A) 正しい。 左がqubit1(Z)、右がqubit0(X)というQiskitの表記順に合致する。
- B) qubit0とqubit1が逆順になっており、実際には「qubit1にX、qubit0にZ」を表してしまう。
- C)
*はQiskitのPauli文字列表記に使われる記法ではなく、そもそも無効な文字列。 - D) カンマ区切りはSparsePauliOpのラベル表記として認識されない不正な形式。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.SparsePauliOp / https://quantum.cloud.ibm.com/docs/en/guides/operators-overview
Q2
SparsePauliOp.from_sparse_list([("ZX", [1, 4], 1.0), ("YY", [0, 3], -1+1j)], num_qubits=5) が表す2つの5量子ビットラベルの組はどれか。
- A)
"XIIZI"と"IYIIY" - B)
"ZXIII"と"YYIII" - C)
"IZIXI"と"YIIYI" - D)
"IIZXI"と"IIYYI"
解答・解説
答え: A
from_sparse_listは(pauli文字列, 対象qubitインデックス, 係数)のタプルを受け取り、指定したインデックスの位置にPauliを配置し、残りは恒等演算Iで埋める。1つ目は qubit1=Z, qubit4=X → 右からqubit0=I,1=Z,2=I,3=I,4=X で"XIIZI"。2つ目はqubit0=Y, qubit3=Y → "IYIIY"。
各選択肢について:
- A) 正しい。 指定インデックスの位置に正しくPauliが配置されている。
- B) 全てのPauliが右端側(低いインデックス)に固まっており、インデックス1や4への配置が反映されていない。
- C) IとPauliの配置位置がずれており、指定インデックスと一致しない。
- D) 同様にインデックスの割り当てが誤っている。
参考: https://quantum.cloud.ibm.com/docs/en/guides/operators-overview / https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.SparsePauliOp
Q3
Pauli('IZ').to_matrix() の対角成分として正しいものはどれか。
- A)
diag(1,-1,1,-1) - B)
diag(-1,-1,-1,-1) - C)
diag(-1,-1,1,1) - D)
diag(1,-1,-1,1)
解答・解説
答え: A
Pauli('IZ')は$I\otimes Z$を表す。$I=\mathrm{diag}(1,1)$、$Z=\mathrm{diag}(1,-1)$なので、テンソル積は$I\otimes Z=\mathrm{diag}(1,-1,1,-1)$となる。
各選択肢について:
- A) 正しい。 I⊗Zの計算結果と一致する。
- B) これは
-I⊗I(全て-1)に相当し、'IZ'ではなく'-II'の場合の結果。 - C) これは
-Z⊗Iに相当する結果で、順序と符号が異なる。 - D) これは
Z⊗Zの結果(diag(1,-1,-1,1))に近いが、実際の計算結果とは異なる。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Pauli
Q4
IBM Quantum実機(Heronプロセッサファミリー)のネイティブゲートセットに含まれないものはどれか。
- A)
RZ - B)
SX - C)
X - D)
Toffoli(CCX)
解答・解説
答え: D
HeronプロセッサファミリーのネイティブゲートはCZ(2量子ビット)、RZ・SX・X(単一量子ビット)などで構成される。3量子ビットゲートのToffoliはネイティブゲートに含まれず、トランスパイラによって基本ゲートの組み合わせに分解される。
各選択肢について:
- A) Heronの単一量子ビットネイティブゲートに含まれる。
- B) Heronの単一量子ビットネイティブゲートに含まれる。
- C) Heronの単一量子ビットネイティブゲートに含まれる。
- D) 正しい(含まれない)。 Toffoliは3量子ビットゲートであり、実機のネイティブゲートセットには存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/native-gates
Q5
$X=\begin{pmatrix}0&1\\1&0\end{pmatrix}$ の固有値$+1$に対応する固有状態はどれか。
- A) $|0\rangle$
- B) $|1\rangle$
- C) $|+\rangle$
- D) $|-\rangle$
解答・解説
答え: C
$X|+\rangle=\frac{1}{\sqrt2}\begin{pmatrix}0&1\\1&0\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}=\frac{1}{\sqrt2}\begin{pmatrix}1\\1\end{pmatrix}=|+\rangle$となり固有値+1が確認できる。
各選択肢について:
- A) $X|0\rangle=|1\rangle$となり、$|0\rangle$自身には戻らないため固有状態ではない。
- B) $X|1\rangle=|0\rangle$となり、同様に固有状態ではない。
- C) 正しい。 $|+\rangle$はXの固有値+1の固有状態である。
- D) $X|-\rangle=-|-\rangle$となり、これは固有値-1の固有状態である。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.XGate
Q6
$H$ゲートを$|1\rangle$に適用した結果はどれか。
- A) $|0\rangle$
- B) $|1\rangle$
- C) $\frac{1}{\sqrt2}(|0\rangle-|1\rangle)$
- D) $\frac{1}{\sqrt2}(|0\rangle+|1\rangle)$
解答・解説
答え: C
$H=\frac{1}{\sqrt2}\begin{pmatrix}1&1\\1&-1\end{pmatrix}$を$|1\rangle=\begin{pmatrix}0\\1\end{pmatrix}$に適用すると$\frac{1}{\sqrt2}\begin{pmatrix}1\\-1\end{pmatrix}=|-\rangle$になる。
各選択肢について:
- A) Hゲートは基底状態をそのまま保存しない(重ね合わせを作る)ため誤り。
- B) 同様にHは恒等変換ではないため誤り。
- C) 正しい。 $H|1\rangle=|-\rangle=\frac{1}{\sqrt2}(|0\rangle-|1\rangle)$。
- D) これは$H|0\rangle=|+\rangle$の結果であり、$|1\rangle$への適用結果ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.HGate
Q7
Operator.from_label('Y')が表す行列はどれか。
- A) $\begin{pmatrix}0&1\\1&0\end{pmatrix}$
- B) $\begin{pmatrix}0&-i\\i&0\end{pmatrix}$
- C) $\begin{pmatrix}1&0\\0&-1\end{pmatrix}$
- D) $\frac{1}{\sqrt2}\begin{pmatrix}1&1\\1&-1\end{pmatrix}$
解答・解説
答え: B
公式APIリファレンスに各ラベルに対応する行列が明記されており、'Y'は$\begin{pmatrix}0&-i\\i&0\end{pmatrix}$である。
各選択肢について:
- A) これはXゲート(ビット反転)の行列。
- B) 正しい。 これがYゲートの行列。
- C) これはZゲート(位相反転)の行列。
- D) これはHゲート(アダマール)の行列。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Operator
Q8
$RY(\pi)|0\rangle$ の結果はどれか(グローバル位相は無視)。
- A) $|0\rangle$
- B) $|1\rangle$
- C) $|+\rangle$
- D) $|-\rangle$
解答・解説
答え: B
$RY(\pi)=\begin{pmatrix}\cos(\pi/2)&-\sin(\pi/2)\\sin(\pi/2)&\cos(\pi/2)\end{pmatrix}=\begin{pmatrix}0&-1\\1&0\end{pmatrix}$を$|0\rangle$に適用すると$\begin{pmatrix}0\\1\end{pmatrix}=|1\rangle$になる。
各選択肢について:
- A) $RY(\pi)$は$|0\rangle$を変化させずに保つゲートではない。
- B) 正しい。 $RY(\pi)$はBlochスフィア上でY軸まわりに180°回転させ、$|0\rangle$と$|1\rangle$を入れ替える。
- C) $|+\rangle$を作るには$RY(\pi/2)$が必要で、$RY(\pi)$では得られない。
- D) $|-\rangle$も同様に別の回転角が必要。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.RYGate
Q9
状態 $|\psi\rangle=a|0\rangle+b|1\rangle$ が正規化されている条件はどれか。
- A) $a+b=1$
- B) $|a|^2+|b|^2=1$
- C) $a=b$
- D) $|a|+|b|=1$
解答・解説
答え: B
量子状態のノルムが1であること、すなわち全確率の和が1になることが正規化条件であり、これは振幅の絶対値の2乗の和で表される(ボルンの規則の前提)。
各選択肢について:
- A) 振幅そのものの和が1という条件は正規化とは無関係(複素数の場合は特に無意味)。
- B) 正しい。 これが状態ベクトルのノルムが1であることを表す正規化条件。
- C) aとbが等しいことは正規化とは無関係の別の条件。
- D) 絶対値の1乗の和が1という条件は、正しい正規化条件(2乗和)とは異なる。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Statevector
Q10
量子ビットが$|1\rangle$のとき、観測量$Z$の期待値$\langle1|Z|1\rangle$はいくつか。
- A) 1
- B) -1
- C) 0
- D) i
解答・解説
答え: B
$Z|1\rangle=-|1\rangle$なので$|1\rangle$は固有値-1の固有ベクトルであり、$\langle1|Z|1\rangle=-1\times\langle1|1\rangle=-1$となる。
各選択肢について:
- A) これは$|0\rangle$に対する期待値。
- B) 正しい。 $|1\rangle$はZの固有値-1の固有ベクトルであるため期待値は-1。
- C) 重ね合わせ状態(例えば$|+\rangle$)での期待値がこれにあたる。
- D) Zは実数の固有値を持つエルミート演算子であり、期待値が虚数になることはない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Operator
Q11
QiskitのCXGate(q0制御, q1ターゲット)の行列表現について、正しい説明はどれか。
- A) Qiskitは常に教科書と同じビット順序を採用する
- B) Qiskitはリトルエンディアン(高いqubitインデックスが上位ビット)を採用し、教科書の慣例と異なる場合がある
- C) 量子ビットに順序の概念はない
- D) CXには制御・ターゲットの区別がなく行列は対称
解答・解説
答え: B
公式APIリファレンスに「Qiskitの慣例では高いqubitインデックスほど上位ビットである(リトルエンディアン)。多くの教科書では制御ビットを上位ビットとして書く」と明記されている。
各選択肢について:
- A) 教科書とQiskitのビット順序は必ずしも一致しないため誤り。
- B) 正しい。 リトルエンディアン慣例により、教科書の表記と行列の並びが異なることがある。
- C) 実際には明確な順序(インデックス順)の概念が存在する。
- D) CXは制御と非制御で作用が異なる非対称なゲートであり、行列も対称ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.CXGate
Q12
量子ゲートを表す行列$U$がユニタリである条件はどれか。
- A) $U+U^\dagger=\mathbb{1}$
- B) $U^\dagger U=\mathbb{1}$
- C) $\det(U)=0$
- D) $U=U^\dagger$
解答・解説
答え: B
ユニタリ行列の定義は共役転置との積が単位行列になることであり、これが量子状態のノルム保存(確率保存)を保証する。
各選択肢について:
- A) 加算で単位行列になるという条件は物理的意味を持たず、ユニタリ性の定義でもない。
- B) 正しい。 これがユニタリ性の定義そのもの。
- C) 行列式がゼロは特異行列(逆行列を持たない)を意味し、むしろユニタリ行列とは相容れない。
- D) これはエルミート行列の条件であり、ユニタリとは別の概念(両方を満たすゲートも存在するが一般的な条件ではない)。
参考: https://quantum.cloud.ibm.com/docs/en/guides/synthesize-unitary-operators
Q13
h(0); cx(0,1) を$|00\rangle$に適用した結果はどれか。
- A) $\frac{1}{\sqrt2}(|00\rangle+|10\rangle)$
- B) $\frac{1}{\sqrt2}(|00\rangle+|11\rangle)$
- C) $\frac{1}{\sqrt2}(|01\rangle+|10\rangle)$
- D) $|11\rangle$
解答・解説
答え: B
h(0)で$\frac{1}{\sqrt2}(|00\rangle+|10\rangle)$になり、cx(0,1)でq0が1の項のq1を反転させて$\frac{1}{\sqrt2}(|00\rangle+|11\rangle)$というベル状態が得られる。
各選択肢について:
- A) これはHゲート直後、CXゲート適用前の中間状態。
- B) 正しい。 これが最終的に得られるベル状態(最大もつれ状態)。
- C) この形はCXの制御・ターゲットの取り違えなどでは生じない誤った組み合わせ。
- D) 確定的な状態であり、Hゲートによる重ね合わせが反映されていない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.HGate / https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.CXGate
Q14
PhaseGate(θ)で$\theta=\pi/2$のとき、これはどのゲートと一致するか。
- A)
X - B)
Z - C)
S - D)
T
解答・解説
答え: C
$P(\theta)=\begin{pmatrix}1&0\\0&e^{i\theta}\end{pmatrix}$であり、$\theta=\pi/2$のとき$e^{i\pi/2}=i$となるので$P(\pi/2)=\begin{pmatrix}1&0\\0&i\end{pmatrix}=S$ゲートと一致する。
各選択肢について:
- A) Xゲートは基底の入れ替え(非対角行列)であり、位相ゲート(対角行列)とは全く異なる。
- B) Zゲートは$\theta=\pi$の場合に対応する。
- C) 正しい。 $\theta=\pi/2$のときPhaseGateはSゲートと一致する。
- D) Tゲートは$\theta=\pi/4$の場合に対応する。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.PhaseGate
Q15
状態$\frac12|0\rangle+\frac{\sqrt3}{2}|1\rangle$を測定して1が得られる確率はいくつか。
- A) 0.25
- B) 0.5
- C) 0.75
- D) 1.0
解答・解説
答え: C
ボルンの規則により1が得られる確率は振幅の絶対値の2乗、すなわち$\left|\frac{\sqrt3}{2}\right|^2=\frac34=0.75$。
各選択肢について:
- A) これは
0が得られる確率($|1/2|^2=0.25$)。 - B) 重ね合わせが均等な場合(例えば$|+\rangle$)の確率であり、この問題には当てはまらない。
- C) 正しい。 $|\sqrt3/2|^2=0.75$。
- D) 確率1は状態が完全に$|1\rangle$である場合にのみ成立する。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Statevector
Q16
$RX(\pi)$を$|1\rangle$に適用後、0が得られる確率はいくつか。
- A) 0
- B) 0.5
- C) 1
- D) 0.1464
解答・解説
答え: C
$RX(\pi)|1\rangle=-i|0\rangle$となり(グローバル位相$-i$を除けば$|0\rangle$)、確率は$|-i|^2=1$。
各選択肢について:
- A) 確率0は誤り。実際には確実に
0が測定される。 - B) 確率0.5は重ね合わせ状態の場合であり、ここでは該当しない。
- C) 正しい。 $RX(\pi)$は180°回転(ビット反転に相当)であり確実に0が得られる。
- D) これは$RX(\pi/4)$を$|0\rangle$に適用した場合の確率に近く、この設問とは異なる。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.RXGate
Q17
$RX(\pi/4)$を$|0\rangle$に適用後、1が得られる確率はおよそいくつか。
- A) 0.1464
- B) 0.5
- C) 1
- D) 0.8536
解答・解説
答え: A
$RX(\pi/4)|0\rangle=\begin{pmatrix}\cos(\pi/8)\\-i\sin(\pi/8)\end{pmatrix}$となり、1が得られる確率は$\sin^2(\pi/8)\approx0.1464$。
各選択肢について:
- A) 正しい。 $\sin^2(\pi/8)\approx0.1464$。
- B) これは大きな回転(例えば$\pi/2$)を適用した場合の確率に近い。
- C) 確率1は180°(π)回転相当のときにのみ成立する。
- D) これは
0が得られる確率($\cos^2(\pi/8)$)であり、1の確率ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.RXGate
Q18
$RY(\pi/6)$を$|0\rangle$に適用後、0が得られる確率はおよそいくつか。
- A) 0.933
- B) 0.067
- C) 0.5
- D) 0.25
解答・解説
答え: A
$RY(\pi/6)|0\rangle=\begin{pmatrix}\cos(\pi/12)\\sin(\pi/12)\end{pmatrix}$となり、0が得られる確率は$\cos^2(\pi/12)\approx0.933$。
各選択肢について:
- A) 正しい。 $\cos^2(\pi/12)\approx0.933$。
- B) これは
1が得られる確率($\sin^2(\pi/12)$)であり、0の確率ではない。 - C) 回転角が大きい(例えば$\pi/2$)場合に近い確率であり、ここでは該当しない。
- D) 同様に該当しない中間的な値。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.RYGate
Q19
TゲートをQiskitで$|1\rangle$に適用したとき、導入されるグローバル位相はどれか。
- A) $\pi/2$
- B) $-\pi/2$
- C) $-\pi/4$
- D) $\pi/4$
解答・解説
答え: D
$T=\begin{pmatrix}1&0\\0&e^{i\pi/4}\end{pmatrix}$を$|1\rangle$に適用すると$e^{i\pi/4}|1\rangle$となり、$\pi/4$の位相が付与される。
各選択肢について:
- A) これはSゲート($\theta=\pi/2$)に相当する位相。
- B) 負の位相は生じない。
- C) 符号が逆(負)であり誤り。
- D) 正しい。 Tゲートは$\pi/4$の位相を導入する。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.TGate
Q20
Statevector.evolve()メソッドについて、正しい説明はどれか。
- A) 状態ベクトルにユニタリ変換を適用し新しいStatevectorを返す
- B) 測定して確率的にビット列を返す
- C) OpenQASM 3文字列に変換する
- D) ノルムを1に正規化する
解答・解説
答え: A
evolve()はQuantumCircuitやOperatorなどのユニタリな変換を状態ベクトルに適用し、新しいStatevectorオブジェクトを返す(元のオブジェクトは変更されない)。
各選択肢について:
- A) 正しい。 ユニタリ変換の適用結果として新しいStatevectorを返す。
- B) 測定して確率的にサンプリングするのは
sample_counts()などの役割。 - C) OpenQASM 3への変換はQuantumCircuit側の機能であり、Statevectorには存在しない。
- D) 正規化の確認・実行は
is_valid()などの別の機能。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Statevector
Q21
量子回路にHadamardゲートを追加する正しいメソッドはどれか。
- A)
circuit.hadamard() - B)
circuit.h() - C)
circuit.add_h() - D)
circuit.apply_hadamard()
解答・解説
答え: B
QuantumCircuitの標準ゲートメソッドは短い記号名(h, x, cxなど)で統一されており、Hadamardゲートはh()で適用する。
各選択肢について:
- A)
hadamard()という名前のメソッドは存在しない。 - B) 正しい。
h()が標準のメソッド名。 - C)
add_h()という命名規則はQiskitの標準ゲートメソッドには使われない。 - D)
apply_hadamard()も同様に存在しないメソッド名。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.HGate / https://quantum.cloud.ibm.com/docs/en/guides/construct-circuits
Q22
circuit.cx(0, 1)のように、制御量子ビット0・ターゲット量子ビット1のCNOTゲートを適用する正しいメソッドはどれか。
- A)
circuit.cnot(0, 1) - B)
circuit.cx(0, 1) - C)
circuit.controlled_x(0, 1) - D)
circuit.c_not(0, 1)
解答・解説
答え: B
CNOT(制御NOT)ゲートはQiskitではcx()メソッドで適用する。cxは「controlled-X」の略。
各選択肢について:
- A)
cnot()という名前のメソッドはQiskitには存在しない。 - B) 正しい。
cx()がCNOTゲート適用の標準メソッド。 - C)
controlled_x()という命名は使われない。 - D)
c_not()という命名も存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.CXGate
Q23
回路の量子ビット2にパウリZゲートを適用する正しいメソッドはどれか。
- A)
circuit.z(2) - B)
circuit.pauli_z(2) - C)
circuit.pz(2) - D)
circuit.apply_z(2)
解答・解説
答え: A
PauliのZゲートはz()メソッドで適用する。他のPauliゲート(x(), y())と同様の命名規則。
各選択肢について:
- A) 正しい。
z()が標準のメソッド名。 - B)
pauli_z()という長い名前のメソッドは存在しない。 - C)
pz()という省略形も使われない。 - D)
apply_z()という命名も存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/construct-circuits
Q24
量子ビットをX軸まわりに角度θだけ回転させるゲートはどれか。
- A)
rx(θ) - B)
rotx(θ) - C)
x_rotation(θ) - D)
rotate_x(θ)
解答・解説
答え: A
回転ゲートはrx, ry, rzという統一された短縮名で提供されており、X軸まわりの回転はrx(θ, qubit)で適用する。
各選択肢について:
- A) 正しい。
rx()がX軸回転ゲートの標準メソッド。 - B)
rotx()という命名は使われない。 - C)
x_rotation()も同様に存在しない。 - D)
rotate_x()も存在しない命名。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.RXGate
Q25
qiskit.quantum_info.Statevectorクラスが表すものはどれか。
- A) 量子回路
- B) 状態ベクトルとしての量子状態
- C) 測定結果
- D) 量子演算子
解答・解説
答え: B
Statevectorは$2^n$次元の複素ベクトルとしてn量子ビット系の量子状態を表現するクラス。
各選択肢について:
- A) 量子回路は
QuantumCircuitクラスが表す。 - B) 正しい。 Statevectorは量子状態を複素ベクトルとして表現する。
- C) 測定結果(カウント)はSamplerの結果オブジェクトなどが表す。
- D) 量子演算子は
OperatorやSparsePauliOpが表す。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Statevector
Q26
Operatorクラス(量子演算子を表す)が定義されているパッケージはどれか。
- A)
qiskit.circuit - B)
qiskit.operators - C)
qiskit.quantum_info - D)
qiskit.extensions
解答・解説
答え: C
Operator、Statevector、SparsePauliOp、Pauliといった量子情報を扱うクラス群は、いずれもqiskit.quantum_infoモジュールに定義されている。
各選択肢について:
- A)
qiskit.circuitは回路構築(QuantumCircuit, Gate, Parameterなど)のためのパッケージ。 - B)
qiskit.operatorsという名前のパッケージはQiskitには存在しない。 - C) 正しい。 OperatorはQuantum_infoモジュールに定義されている。
- D)
qiskit.extensionsはレガシーなモジュールで、現行のOperatorの定義場所ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Operator / https://quantum.cloud.ibm.com/docs/en/guides/operators-overview
Q27
回路の途中経過の状態ベクトルを取得する方法として妥当なものはどれか。
- A) Qiskit Aerの
circuit.save_statevector()をシミュレーションに使う - B)
Statevector.from_instruction()メソッドを使う - C) リファレンスの
StatevectorSamplerプリミティブを使う - D) 上記すべてが有効な方法である
解答・解説
答え: D
目的や実行環境に応じて、Aerでのシミュレーション途中の状態保存、Statevectorによる直接計算、StatevectorSamplerプリミティブの利用など、複数の妥当なアプローチが存在する。
各選択肢について:
- A) 単独としては有効な方法の一つ(Aerシミュレータでの利用)。
- B) 単独としても有効な方法の一つ(直接計算)。
- C) 単独としても有効な方法の一つ(primitiveベースの利用)。
- D) 正しい。 目的に応じて、これら全てが状態ベクトル取得の妥当な手段になり得る。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.quantum_info.Statevector / https://qiskit.github.io/qiskit-aer/stubs/qiskit_aer.AerSimulator.html
セクション2: Visualize quantum circuits, measurements, and states(配点11%)
Q28
circuit.draw()でoutput引数を指定しなかった場合のデフォルトはどれか。
- A)
mpl - B)
text - C)
latex - D)
latex_source
解答・解説
答え: B
公式APIリファレンス(circuit_drawer)に、ユーザー設定ファイルで別のデフォルトを指定していない限りtext(ASCIIアート形式)がデフォルトの描画方式であると明記されている。
各選択肢について:
- A) mplはmatplotlibによる画像描画で、明示的に指定しないと使われない。
- B) 正しい。 textがデフォルトの描画方式。
- C) latexはLaTeXレンダリングで、明示指定が必要。
- D) latex_sourceはLaTeXソースコードの文字列を返す形式で、これも明示指定が必要。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.circuit_drawer
Q29
plot_histogram()のsort引数のデフォルト値はどれか。
- A)
'asc' - B)
'desc' - C)
'value' - D)
'hamming'
解答・解説
答え: A
公式APIリファレンスにsort引数のデフォルトが'asc'(ビット列の昇順)であると明記されている。
各選択肢について:
- A) 正しい。 デフォルトはビット列の昇順('asc')。
- B) 'desc'(降順)は明示的に指定する必要がある。
- C) 'value'(カウント数順)も明示指定が必要な選択肢。
- D) 'hamming'(ハミング距離順)はtarget_stringと組み合わせて使う特殊なオプション。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.plot_histogram
Q30
plot_state_qsphere()における点の大きさと色は、それぞれ何を表すか。
- A) 大きさが位相、色が確率
- B) 大きさが確率、色が位相
- C) 大きさも色も確率
- D) 大きさも色も位相
解答・解説
答え: B
公式ドキュメントに「点の大きさは状態の確率に比例し、色は位相を表す」と明記されている。
各選択肢について:
- A) 大きさと色の役割が逆になっている。
- B) 正しい。 大きさ=確率、色=位相という対応が正しい。
- C) 大きさと色が同じ情報を表すという説明は誤り(冗長な表現ではなく異なる情報を持つ)。
- D) 同様に誤り。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.plot_state_qsphere
Q31
plot_gate_map()関数について、正しい説明はどれか。
- A) 回路を渡して論理構造を可視化する
- B) バックエンドを渡して接続トポロジを可視化する
- C) 状態ベクトルを渡してゲートマップを表示する
- D) 測定カウントを渡してヒストグラムを表示する
解答・解説
答え: B
plot_gate_map()はbackendインスタンスを渡し、そのデバイスの量子ビット接続トポロジ(coupling map)を可視化する関数。
各選択肢について:
- A) 回路の論理構造の可視化は
circuit.draw()の役割。 - B) 正しい。 バックエンドの接続トポロジを可視化する。
- C) 状態ベクトルの可視化には
plot_state_qsphere()やplot_bloch_multivector()を使う。 - D) 測定カウントのヒストグラムは
plot_histogram()の役割。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.plot_gate_map
Q32
circuit.draw(output='mpl', style='iqp')のstyle引数の目的はどれか。
- A) 量子ビット数を変更する
- B) 描画の配色・見た目を変更する
- C) 回路をトランスパイルしてから描画する
- D) ヒストグラムのスタイルを変更する
解答・解説
答え: B
style引数(output='mpl'のときのみ有効)は回路図の配色・線の太さ・フォントなどの見た目のテーマを指定するもので、回路の構造自体には影響しない。
各選択肢について:
- A) 量子ビット数は
QuantumCircuitのコンストラクタで決まり、draw()の引数では変更できない。 - B) 正しい。 styleは見た目のテーマを指定する引数。
- C) draw()はあくまで既存の回路を描画するだけで、トランスパイルは行わない。
- D) ヒストグラムのスタイルは
plot_histogram()側の話であり、circuit.draw()とは無関係。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.circuit_drawer
Q33
量子回路を描画・可視化するための正しいメソッドはどれか。
- A)
circuit.show() - B)
circuit.display() - C)
circuit.draw() - D)
circuit.visualize()
解答・解説
答え: C
回路の可視化にはdraw()メソッドを使う。出力形式はoutput引数(text/mpl/latex等)で切り替えられる。
各選択肢について:
- A)
show()というメソッドはQuantumCircuitには存在しない。 - B)
display()も存在しないメソッド(Jupyterの組み込み関数と混同しやすいが別物)。 - C) 正しい。
draw()が回路描画の標準メソッド。 - D)
visualize()も存在しないメソッド。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.visualization.circuit_drawer
セクション3: Create quantum circuits(配点18%)
Q34
thetaに算術演算(2*theta+1)を適用した結果のオブジェクト型はどれか。
- A)
Parameter - B)
ParameterExpression - C)
float - D)
str
解答・解説
答え: B
ParameterはParameterExpressionのサブクラスであり、算術演算(+, *, sin, cosなど)の結果はParameterExpression型のシンボリックな式になる。値は未確定のまま、後でassign_parameters()により数値を代入して評価する。
各選択肢について:
- A) Parameterは個々の未束縛変数を表すクラスで、演算結果はより一般的なExpressionになる。
- B) 正しい。 算術演算の結果はParameterExpression型になる。
- C) 値が未確定のシンボリックな式であるため、即座にfloatとして評価されることはない。
- D) 数式は文字列ではなく、シンボリックなオブジェクトとして保持される。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.Parameter / https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.ParameterExpression
Q35
assign_parameters({theta: 3.14})をデフォルト引数で呼び出した場合の挙動はどれか。
- A) 元の回路を書き換えNoneを返す
- B) 新しいコピーを返し元は変更されない
- C) エラーになる
- D) thetaが回路に残り続ける
解答・解説
答え: B
assign_parameters()はデフォルト(inplace=False)では新しいコピーの回路を返し、元の回路は変更されない。inplace=Trueを指定した場合のみ元の回路が書き換わり戻り値はNoneになる。
各選択肢について:
- A) これは
inplace=Trueを指定した場合の挙動であり、デフォルトの挙動ではない。 - B) 正しい。 デフォルト(inplace=False)は新しいコピーを返す。
- C) パラメータが定義されていれば正常に束縛でき、エラーにはならない。
- D) 束縛後の新しい回路にはthetaは残らない(具体的な数値に置き換わる)。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#assign_parameters
Q36
以下のコードでq1にXゲートが適用されるのはどのような場合か。
circuit.h(q0)
circuit.measure(q0, c0)
with circuit.if_test((c0, 1)):
circuit.x(q1)
- A) 常に適用
- B) c0が1のときのみ
- C) c0が0のときのみ
- D) q0の初期状態による
解答・解説
答え: B
if_test((c0, 1))は古典レジスタ(この場合c0)の値が指定値(1)と一致する場合のみブロック内を実行する動的回路の条件分岐構文。
各選択肢について:
- A) 条件分岐のため常には適用されない。
- B) 正しい。 c0の測定結果が1のときのみXゲートが適用される。
- C) 条件は「c0が1のとき」であり、0のときではない。
- D) 適用条件はあくまでc0の測定結果であり、q0の初期状態そのものではない(H適用後の測定結果次第)。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#if_test
Q37
generate_preset_pass_manager()のoptimization_levelのデフォルト値はどれか。
- A) 0
- B) 1
- C) 2
- D) 3
解答・解説
答え: C
公式APIリファレンスに「By default optimization level 2 is used if this is not specified」と明記されている。0=最適化なし、1=軽い最適化、2=重い最適化(デフォルト)、3=さらに重い最適化。
各選択肢について:
- A) 0は最適化なしのレベルで、デフォルトではない。
- B) 1は軽い最適化のレベルで、デフォルトではない。
- C) 正しい。 デフォルトは2(heavy optimization)。
- D) 3は最も重い最適化レベルで、デフォルトではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.transpiler.generate_preset_pass_manager
Q38
測定された回路の結果を格納するレジスタの種類はどれか。
- A) Ancillary register
- B) Quantum register
- C) Classical register
- D) Circuit register
解答・解説
答え: C
測定結果は古典ビット(Classical register)に格納される。量子レジスタは測定後に状態が収束(collapse)するため、結果の保存場所としては使われない。
各選択肢について:
- A) Ancillary registerは補助的な量子ビットを保持するもので、測定結果の格納とは無関係。
- B) Quantum registerは量子ビットを保持するが、測定後は状態が収束するため結果保存には使われない。
- C) 正しい。 測定結果はClassical registerに格納される。
- D) Circuit registerという種類のレジスタはQiskitには存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/circuit#qiskit.circuit.Register
Q39
measure_all()メソッドについて、正しい説明はどれか。
- A) 既存のクラシカルレジスタが必須
- B) デフォルトで新しいClassicalRegisterを自動追加する
- C) measure_active()と全く同じ
- D) classical bitへの書き込みを行わない
解答・解説
答え: B
measure_all()はデフォルトで、全量子ビット分の新しいClassicalRegisterを自動的に追加してから測定を行う(既存のレジスタは不要)。
各選択肢について:
- A) 既存のクラシカルレジスタが必須という制約はなく、自動で新規作成される。
- B) 正しい。 デフォルトで新しいClassicalRegisterを自動追加する。
- C)
measure_active()はアイドルでない(操作を受けた)量子ビットのみを対象とする点で異なる。 - D) 測定結果はclassical bitに正しく書き込まれる。
参考: https://quantum.cloud.ibm.com/docs/en/guides/measure-qubits
Q40
qc1.compose(qc2)について、正しい説明はどれか。
- A) テンソル積として結合し量子ビット数を増やす
- B) qc2の命令をqc1の後ろに追加した回路を返す
- C) 量子ビット数が異なると必ずエラー
- D) 測定を含む回路には使えない
解答・解説
答え: B
compose()は呼び出し元の回路(qc1)の後ろに引数の回路(qc2)の命令を追加(縫い合わせ)する。デフォルトでは新しい回路を返す。
各選択肢について:
- A) テンソル積による量子ビット数の増加は
tensor()メソッドの役割であり、compose()とは異なる。 - B) 正しい。 qc2の命令をqc1の後ろに追加した回路を返す。
- C)
qubits引数で対応関係を指定すれば、異なる量子ビット数の回路同士でも(部分的に)結合可能。 - D) 測定操作を含む回路にも使用でき、動的回路の構築でも頻繁に利用される。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#compose
Q41
Qiskitのトランスパイラのステージの正しい順序はどれか。
- A) Layout→Init→Routing→Translation→Optimization→Scheduling
- B) Init→Layout→Routing→Translation→Optimization→Scheduling
- C) Init→Routing→Layout→Optimization→Translation→Scheduling
- D) Init→Layout→Optimization→Routing→Translation→Scheduling
解答・解説
答え: B
公式ガイド(Introduction to transpilation)に、プリセットパスマネージャは6ステージ(init, layout, routing, translation, optimization, scheduling)で構成されると明記されている。
各選択肢について:
- A) Layoutを最初に置く順序は誤り。Initが最初に行われる。
- B) 正しい。 Init→Layout→Routing→Translation→Optimization→Schedulingの順。
- C) RoutingがLayoutより先に来るのは誤り(配置してから配線する)。
- D) OptimizationがRoutingより先に来る順序は誤り。
Q42
EfficientSU2クラスについて、Qiskit 2.1以降で正しい記述はどれか。
- A) 引き続き推奨される標準の使い方である
- B) クラスは非推奨化され、関数efficient_su2の使用が推奨されている
- C) Qiskit 2.1で完全に削除され代替は無い
- D) 元々関数として実装されていた
解答・解説
答え: B
公式APIリファレンスに「クラスqiskit.circuit.library.EfficientSU2はQiskit 2.1で非推奨化され、Qiskit 3.0で削除予定。代わりに関数efficient_su2の使用が推奨される」と明記されている。
各選択肢について:
- A) クラスは非推奨化されており、引き続き推奨される標準とは言えない。
- B) 正しい。 クラス版は非推奨、関数版(efficient_su2)が推奨される。
- C) 非推奨(deprecated)であって、まだ削除はされていない(削除はQiskit 3.0予定)。
- D) 元々はクラスとして実装されており、後から関数版が追加された。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.EfficientSU2
Q43
複数レジスタを結合した回路の量子ビット数について。
qr1 = QuantumRegister(2, "qreg1")
qr2 = QuantumRegister(1, "qreg2")
cr1 = ClassicalRegister(3, "creg1")
combined_circ = QuantumCircuit(qr1, qr2, cr1)
combined_circ.num_qubitsの値はどれか。
- A) 2
- B) 3
- C) 1
- D) 6
解答・解説
答え: B
複数のQuantumRegisterをQuantumCircuitのコンストラクタに渡すと結合される。qr1(2量子ビット)+qr2(1量子ビット)=3量子ビット。
各選択肢について:
- A) これはqr1単体の量子ビット数であり、qr2が加算されていない。
- B) 正しい。 2+1=3量子ビット。
- C) これはqr2単体の量子ビット数。
- D) これはClassicalRegisterの3ビットとQuantumRegisterの3量子ビットを誤って合算した数値。
参考: https://quantum.cloud.ibm.com/docs/en/guides/construct-circuits
Q44
if_testが返すコンテキストマネージャをelse_として受け取り、with else_:とした場合の意味はどれか。
- A) 条件を満たさなかった場合の処理を追加できる
- B) 常に実行される
- C) 構文エラーになる
- D) if_test条件と同じ処理が実行される
解答・解説
答え: A
if_testが返すコンテキストマネージャをas else_で受け取り、続けてwith else_:とすることで、if_testの条件を満たさなかった場合(else節)の処理を追加できる。
各選択肢について:
- A) 正しい。 else_ブロックはif_test条件を満たさなかった場合に実行される。
- B) else節も条件付きであり、常に実行されるわけではない。
- C) これはQiskitが正式にサポートするif/else構文であり、構文エラーにはならない。
- D) else節はif_testの条件を満たさなかった場合の処理であり、if_test条件と同じ処理ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#if_test
Q45
以下のコードで、initial_layout=[0,2]かつcoupling_map=[[0,1],[1,2]]のとき、tqcはどうなるか。
qc = QuantumCircuit(2)
qc.h(0); qc.cx(0,1)
pass_manager = generate_preset_pass_manager(
optimization_level=3, coupling_map=[[0,1],[1,2]],
basis_gates=['h','swap','cx'], initial_layout=[0,2])
tqc = pass_manager.run(qc)
- A) エラーになる
- B) cxが無視されHゲートだけになる
- C) SWAPが自動挿入される
- D) initial_layoutが無視され再配置される
解答・解説
答え: C
initial_layoutにより論理q0→物理0、論理q1→物理2に配置されるが、coupling_mapでは物理0と2は直接接続されていない。Routingステージがこれを検出し、basis_gatesに含まれるSWAPゲートを自動挿入して間接的に演算を実現する。
各選択肢について:
- A) 接続されていない量子ビット間の演算はエラーにはならず、SWAPで解決される。これがトランスパイラの重要な役割。
- B) cxは無視されず、SWAP挿入によって正しく実現される。回路の等価性を保つのがトランスパイラの責務。
- C) 正しい。 SWAPゲートが自動的に挿入され、間接的に0と2の間の演算を実現する。
- D) initial_layoutは指定通りに使われ、それを前提にRoutingが動作する。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.transpiler.generate_preset_pass_manager / https://quantum.cloud.ibm.com/docs/en/guides/transpile
Q46
Qiskitで回路構築の中心となる主要パッケージはどれか。
- A)
qiskit.providers - B)
qiskit.circuit - C)
qiskit.quantum_info - D)
qiskit.algorithms
解答・解説
答え: B
QuantumCircuit、Parameter、Gate、各種標準ゲートなど、回路構築の中心となるクラス群はqiskit.circuitパッケージに定義されている。
各選択肢について:
- A)
qiskit.providersはバックエンド(実機・シミュレータ)を扱うためのパッケージ。 - B) 正しい。 回路構築の中心パッケージはqiskit.circuit。
- C)
qiskit.quantum_infoは量子状態・演算子を扱うパッケージであり、回路構築そのものの中心ではない。 - D)
qiskit.algorithms(旧称)はアルゴリズム実装のためのパッケージ。
参考: https://quantum.cloud.ibm.com/docs/en/guides/construct-circuits
Q47
QuantumCircuit.measure()メソッドの動作として正しいものはどれか。
- A) 全量子ビットを自動的に測定する
- B) 指定した量子ビットに測定操作を追加する
- C) 測定結果を返す
- D) 古典ビットを初期化する
解答・解説
答え: B
measure(qubit, clbit)は指定した量子ビットに対して測定操作を回路に追加するだけで、実際の実行(結果取得)は別途primitiveのrun()などで行う。
各選択肢について:
- A) 全量子ビットの自動測定は
measure_all()の役割であり、measure()単体では行われない。 - B) 正しい。 指定した量子ビットに測定操作を追加するのみ。
- C) measure()は回路構築時のメソッドであり、実行結果そのものを返すわけではない。
- D) 古典ビットの初期化とは無関係の機能。
参考: https://quantum.cloud.ibm.com/docs/en/guides/measure-qubits
Q48
3量子ビットの量子回路を作成する正しい方法はどれか。
- A)
QuantumCircuit(3) - B)
Circuit(qubits=3) - C)
QCircuit(3) - D)
create_circuit(3)
解答・解説
答え: A
QuantumCircuitのコンストラクタに整数を渡すと、その数の量子ビットを持つ回路が作成される(対応する古典ビットは省略時0個)。
各選択肢について:
- A) 正しい。 QuantumCircuit(3)が正しいコンストラクタの使い方。
- B)
Circuitという名前のクラスやqubits引数はQiskitには存在しない。 - C)
QCircuitという略称のクラスも存在しない。 - D)
create_circuit()という関数も存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/construct-circuits
Q49
量子ゲートを表すクラスはどれか。
- A)
QuantumGate - B)
Gate - C)
QGate - D)
Instruction
解答・解説
答え: B
qiskit.circuit.Gateが量子ゲートを表す基底クラス。GateはInstructionのサブクラスで、ユニタリ性を持つ命令を表す。
各選択肢について:
- A)
QuantumGateという名前のクラスはQiskitには存在しない。 - B) 正しい。 Gateが量子ゲートを表す基底クラス。
- C)
QGateという略称のクラスも存在しない。 - D)
Instructionはより一般的な命令の基底クラス(測定やリセットなど非ユニタリな操作も含む)で、Gateの親クラスにあたる。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.Gate
Q50
3ビットの古典レジスタを作成する正しい方法はどれか。
- A)
ClassicalRegister(3) - B)
CBit(3) - C)
ClassicBits(3) - D)
CRegister(3)
解答・解説
答え: A
ClassicalRegisterのコンストラクタに整数を渡すと、その数の古典ビットを持つレジスタが作成される。
各選択肢について:
- A) 正しい。 ClassicalRegister(3)が正しいコンストラクタの使い方。
- B)
CBitという名前のクラスは存在しない。 - C)
ClassicBitsという名前も存在しない。 - D)
CRegisterという略称も存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/circuit#qiskit.circuit.Register
Q51
barrier()メソッドが回路内で果たす役割はどれか。
- A) 量子ビットの測定を禁止する
- B) 視覚的な区切りとして機能し、またがる最適化を防ぐ
- C) 誤り訂正のバリアを作成する
- D) ゲートの適用をブロックする
解答・解説
答え: B
barrier()は回路描画上の視覚的な区切りとして機能するとともに、トランスパイラの最適化パスがバリアをまたいでゲートを並べ替えたり融合したりすることを防ぐ。
各選択肢について:
- A) 測定を禁止する機能はなく、barrier後にも測定操作を追加できる。
- B) 正しい。 視覚的な区切り兼、最適化がまたがるのを防ぐ命令。
- C) 誤り訂正とは無関係の機能。
- D) ゲート適用自体をブロックするわけではなく、あくまで最適化・順序に関する制約。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#barrier
Q52
動的回路における古典フィードフォワードを正しく実装するメソッドはどれか。
- A)
circuit.if_test((clbit, 1), true_body) - B)
circuit.conditional(clbit, true_body) - C)
circuit.if_clause(clbit == 1, true_body) - D)
circuit.measure_and_branch(clbit, true_body)
解答・解説
答え: A
測定結果(古典ビット)に応じて後続のゲート適用を条件分岐させる動的回路の構文はif_test()であり、(clbit, value)のタプルと本体を渡す。
各選択肢について:
- A) 正しい。 if_test()が動的回路の条件分岐の正しい構文。
- B)
conditional()という名前のメソッドは存在しない。 - C)
if_clause()やclbit == 1のようなPython演算子での比較記法もサポートされていない。 - D)
measure_and_branch()という統合メソッドも存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.QuantumCircuit#if_test
セクション4: Run quantum circuits(配点15%)
Q53
Qiskit Runtimeのジョブ実行モードとして正しい組み合わせはどれか。
- A) job, session, batch
- B) classical, quantum, parallel
- C) job, parallel, quantum
- D) session, batch, classical
解答・解説
答え: A
公式ガイド(Execution modes)に、実行モードはjob(単発)・session(セッション)・batch(バッチ)の3種類であると明記されている。
各選択肢について:
- A) 正しい。 job, session, batchの3モードが正しい組み合わせ。
- B) classical, quantum, parallelはいずれも実行モードの正式名称ではない。
- C) parallel, quantumも正式な実行モード名ではない。
- D) classicalも正式な実行モード名ではない(session, batchは正しいがclassicalが誤り)。
参考: https://quantum.cloud.ibm.com/docs/en/guides/execution-modes
Q54
BatchモードとSessionモードの違いについて、正しい説明はどれか。
- A) Batchが専有アクセスを提供、Sessionは提供しない
- B) Sessionが専有アクセスを提供、Batchは提供しない
- C) 両方とも提供する
- D) 両方とも提供しない
解答・解説
答え: B
Sessionは実機への専有(排他)アクセスを提供する期間を確保する仕組みであるのに対し、Batchは複数ジョブの前処理を並列化して効率的に実行するものの、他ユーザーのジョブと同居する可能性がある。
各選択肢について:
- A) 専有アクセスを提供するのはSessionであり、Batchではない。説明が逆。
- B) 正しい。 Sessionが専有アクセスを提供し、Batchは提供しない。
- C) Batchは専有アクセスを提供しないため誤り。
- D) Sessionは専有アクセスを提供するため誤り。
参考: https://quantum.cloud.ibm.com/docs/en/guides/execution-modes
Q55
セッションを正しく開くコードはどれか。
- A)
Session(system='ibm_foo') - B)
execute(service=service) - C)
service = QiskitRuntimeService(); Session(service.least_busy()) - D)
QuantumCircuit(2).open_session()
解答・解説
答え: C
Sessionはバックエンドオブジェクト(service.least_busy()などで取得)を渡して初期化する。
各選択肢について:
- A)
systemという引数名はSessionのコンストラクタには存在しない。 - B)
execute()という関数は現行のqiskit_ibm_runtimeには存在しない(古いAPIとの混同)。 - C) 正しい。 バックエンドを渡してSessionを初期化するのが正しい方法。
- D)
QuantumCircuitにopen_session()というメソッドは存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/run-jobs-session / https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/session
Q56
V2 primitivesに実機を指定して回路を投入する際、正しい説明はどれか。
- A) 内部で自動的にlayout/routing/translationを行う
- B) 行わないため事前にISA回路が必要
- C) トランスパイル済み回路を拒否する
- D) ISA回路の概念はSampler専用
解答・解説
答え: B
V1 primitivesと異なり、V2 primitivesはlayout・routing・translationを内部で行わないため、利用者が事前にISA回路(バックエンドがサポートする命令のみで構成された回路)にトランスパイルしておく必要がある。
各選択肢について:
- A) V2ではこれらの変換を内部では行わない設計に変更された。
- B) 正しい。 V2はlayout/routing/translationを行わないため事前のISA回路化が必要。
- C) トランスパイル済み(ISA)回路こそがV2 primitivesが要求する入力形式であり、拒否されない。
- D) ISA回路の要件はSampler・Estimator両方に共通して適用される。
参考: https://quantum.cloud.ibm.com/docs/en/migration-guides/v2-primitives
Q57
セッションを開いた後、ジョブを一切投入しなかった場合、自動的にクローズされるまでのデフォルト時間はどれか。
- A) 5分
- B) 30分
- C) 1時間
- D) 3時間
解答・解説
答え: B
公式ガイドに「セッションを開いてから30分間ジョブを投入しないと、セッションは自動的にクローズされる」と明記されている(interactive TTL)。
各選択肢について:
- A) 5分は短すぎる値であり、実際の非アクティブタイムアウトではない。
- B) 正しい。 30分の非アクティブタイムアウト(interactive TTL)。
- C) 1時間は誤った値。
- D) 3時間も誤った値。
参考: https://quantum.cloud.ibm.com/docs/en/guides/run-jobs-session
Q58
QiskitRuntimeService.least_busy()について、正しい説明はどれか。
- A) 過去最も早く完了したジョブを返す
- B) 現在最もキューが空いているバックエンドを返す
- C) 最も量子ビット数が少ない実機を返す
- D) 最も新しく追加された実機を返す
解答・解説
答え: B
least_busy()は利用可能な実機バックエンドの中から、現在のペンディングジョブ数(キューの混雑具合)が最も少ないバックエンドを返す。
各選択肢について:
- A) 過去のジョブの完了時刻とは無関係の機能。
- B) 正しい。 現在のキューの混雑状況で最も空いているバックエンドを選ぶ。
- C) 量子ビット数でのフィルタリングは
min_num_qubits引数で別途指定する必要があり、デフォルトの基準ではない。 - D) 実機の新しさとは無関係の機能。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/qiskit-runtime-service#least_busy
Q59
Batchクラスの継承関係について、正しいものはどれか。
- A) Batchは Sessionのサブクラスである
- B) SessionがBatchのサブクラスである
- C) 互いに独立で継承関係はない
- D) BatchはSamplerのサブクラス
解答・解説
答え: A
公式APIリファレンスにclass Batch(backend, max_time=None, *, create_new=True)がBases: Sessionと明記されている。実装上、BatchはSessionを継承したクラス。
各選択肢について:
- A) 正しい。 BatchはSessionのサブクラス(Sessionの機能を土台に実装されている)。
- B) 継承の方向が逆であり誤り。
- C) 実装上は継承関係が存在するため誤り。
- D) BatchとSamplerには継承関係はない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/batch
Q60
フェイクバックエンドやAerSimulatorでprimitiveをインスタンス化した場合の挙動はどれか。
- A) エラーになる
- B) ローカルテストモードが自動的に有効になる
- C) 自動でIBMクラウド実機に接続される
- D) V1系primitiveでしか使えない
解答・解説
答え: B
公式ドキュメントに「フェイクバックエンドやAerバックエンドのインスタンスをprimitiveやセッションのインスタンス化時に使うと、ローカルテストモードが自動的に有効になる」と明記されている。
各選択肢について:
- A) エラーにはならず、正常にローカルでシミュレーションが実行される。
- B) 正しい。 ローカルテストモードが自動的に有効になる。
- C) ローカルテストモードなのでクラウド実機には接続されない。
- D) V2系primitiveでも問題なく利用できる機能。
参考: https://quantum.cloud.ibm.com/docs/en/guides/local-testing-mode
Q61
Qiskitにおけるtranspile()の目的はどれか。
- A) 量子回路を実行する
- B) 回路を特定のバックエンドハードウェアに適合するよう変換する
- C) 量子ノイズをシミュレートする
- D) 回路を可視化する
解答・解説
答え: B
transpile()(およびgenerate_preset_pass_manager())は、抽象的な回路をバックエンドのネイティブゲート・接続トポロジに適合する形に変換する処理。
各選択肢について:
- A) 回路の実行(結果取得)はprimitiveの
run()の役割であり、transpile()自体は実行しない。 - B) 正しい。 バックエンドの制約に適合させる変換処理が目的。
- C) ノイズのシミュレートはAerSimulatorなどのノイズモデルの役割。
- D) 回路の可視化は
draw()の役割。
Q62
Qiskit Aerにおけるデフォルトのシミュレータバックエンドの名称はどれか。
- A)
qasm_simulator - B)
AerSimulator - C)
statevector_simulator - D)
BasicSimulator
解答・解説
答え: B
現行のQiskit AerではAerSimulatorが標準の汎用シミュレータバックエンドであり、シミュレーション方式(statevector, density_matrix, stabilizerなど)をオプションで切り替えられる。
各選択肢について:
- A)
qasm_simulatorは旧バージョン(V1系)の名称であり、現行の標準ではない。 - B) 正しい。 AerSimulatorが現行の標準シミュレータバックエンド。
- C)
statevector_simulatorもAerSimulatorに統合される前の旧称。 - D)
BasicSimulatorはQiskit本体に含まれる簡易シミュレータであり、Aerのデフォルトではない。
参考: https://qiskit.github.io/qiskit-aer/stubs/qiskit_aer.AerSimulator.html
Q63
複数の関連ジョブをまとめて実行し、キュー待ち時間を削減したい場合に使う実行モードはどれか。
- A) Job mode
- B) Session mode
- C) Batch mode
- D) Runtime mode
解答・解説
答え: B
反復的な計算(VQEやVQCなど、古典・量子計算を交互に行うアルゴリズム)でジョブ間の待ち時間を削減したい場合は、専有アクセスを提供するSession modeが適する。
各選択肢について:
- A) Job modeは単発のジョブ向けで、複数ジョブの効率化には向かない。
- B) 正しい。 反復的なジョブの効率化にはSession modeが適する。
- C) Batch modeは独立した(条件関係のない)複数ジョブに向くが、専有アクセスは提供しないため反復アルゴリズムには不向きな場合がある。
- D)
Runtime modeという名前の実行モードはQiskit Runtimeには存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/execution-modes
セクション5: Use the sampler primitive(配点12%)
Q64
SamplerV2の核心的な役割として、公式ドキュメントの記述に最も近いものはどれか。
- A) 観測量の期待値を計算すること
- B) 回路の実行結果から出力レジスタをサンプリングすること
- C) 回路をネイティブゲートに変換すること
- D) ジョブをスケジューリングすること
解答・解説
答え: B
公式ドキュメントに「Samplerの核心的な役割は、1つ以上の量子回路の実行結果から出力レジスタをサンプリングすることである」と明記されている。
各選択肢について:
- A) 観測量の期待値計算はEstimatorの役割。
- B) 正しい。 Samplerは出力レジスタをサンプリングする。
- C) ネイティブゲートへの変換はトランスパイラの役割。
- D) ジョブのスケジューリングはRuntimeサービス側の役割であり、Sampler自体の核心的な役割ではない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/primitives / https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/sampler-v2
Q65
SamplerOptions.default_shotsのデフォルト値はどれか。
- A) 1024
- B) 2048
- C) 4096
- D) 8192
解答・解説
答え: C
公式APIリファレンスに「PUBやrunメソッドでshotsが指定されなかった場合に使われるデフォルトのショット数」として4096が明記されている。
各選択肢について:
- A) 1024は他のツールでよく見る値だが、Qiskit RuntimeのSamplerOptionsのデフォルトではない。
- B) 2048もデフォルト値ではない。
- C) 正しい。 default_shotsのデフォルトは4096。
- D) 8192もデフォルト値ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-sampler-options
Q66
Samplerのdynamical_decoupling.enableについて、正しい説明はどれか。
- A) デフォルトでTrue
- B) デフォルトでFalse、明示的に有効化が必要
- C) enableオプションは存在しない
- D) Estimator専用
解答・解説
答え: B
公式APIリファレンス(DynamicalDecouplingOptions)に「Default: False」と明記されており、動的デカップリングを使うにはsampler.options.dynamical_decoupling.enable = Trueのように明示的に有効化する必要がある。
各選択肢について:
- A) デフォルトはFalse(無効)であり、Trueではない。
- B) 正しい。 dynamical_decoupling.enableのデフォルトはFalse。
- C) enableオプションは実在する。
- D) dynamical_decouplingはSampler・Estimatorの両方で利用可能なオプション。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-dynamical-decoupling-options
Q67
SamplerV2のrun()メソッドを呼び出す正しい方法はどれか。
- A)
sampler.run([isa_circuit]) - B)
sampler.run(distribution, isa_circuit) - C)
sampler.run(isa_circuit, distribution='gauss') - D)
sampler.run([...], runs=1024)
解答・解説
答え: A
run()の第一引数pubsはイテラブル(リストなど)であり、単一の回路であってもリストで包んで渡す必要がある。渡す回路は事前にISA回路化されている必要がある。
各選択肢について:
- A) 正しい。 run()の第一引数はイテラブル(リスト)で渡す。
- B)
distributionという引数はrun()には存在しない架空の引数。 - C) 同様にdistribution引数は存在しない。
- D) shots引数の名前は
runsではなくshotsが正しい名前。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/sampler-v2
Q68
SamplerV2の結果からビット数(width)を確認する場合、どこを見るのが適切か。
- A)
result.data.<register名>のBitArrayのnum_bits属性 - B)
result.metadata['shots'] - C)
result.observables - D)
result.precision
解答・解説
答え: A
公式APIリファレンス(BitArray)に「num_bits: このBitArrayが保持するレジスタのビット数」と明記されている。例えばClassicalRegister(5, 'meas')であればnum_bits=5になる。
各選択肢について:
- A) 正しい。 BitArray.num_bitsがビット数(レジスタの幅)を表す。
- B) metadataにshots情報が含まれることもあるが、これはビット数ではなく実行回数を指す別の概念。
- C) observablesとprecisionはEstimatorのPUB要素であり、Samplerの結果には存在しない。
- D) 同上。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.primitives.BitArray
Q69
TwirlingOptions.enable_measureのデフォルトについて、正しい説明はどれか。
- A) SamplerもEstimatorも常にFalse
- B) SamplerもEstimatorも常にTrue
- C) EstimatorはTrue、SamplerはFalse
- D) EstimatorはFalse、SamplerはTrue
解答・解説
答え: C
公式APIリファレンスに「測定命令へのtwirling適用のデフォルトはEstimatorの場合True、Samplerの場合False」と明記されている。
各選択肢について:
- A) Estimatorのデフォルトは実際にはTrueであるため誤り。
- B) Samplerのデフォルトは実際にはFalseであるため誤り。
- C) 正しい。 Estimatorは True、Samplerは False がデフォルト。
- D) EstimatorとSamplerの割り当てが逆になっている。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-twirling-options
Q70
回路を実行して準確率分布(quasi-probability distribution)を得るために使うV2 primitiveはどれか。
- A)
Executor - B)
SamplerV2 - C)
Runner - D)
EstimatorV2
解答・解説
答え: B
測定結果(カウント、確率分布)を得るためのprimitiveはSamplerV2であり、期待値を計算するEstimatorV2とは役割が異なる。
各選択肢について:
- A)
Executorという名前のprimitiveはQiskitには存在しない。 - B) 正しい。 SamplerV2が測定結果の(準)確率分布を返すprimitive。
- C)
Runnerという名前のprimitiveも存在しない。 - D) EstimatorV2は期待値を計算するprimitiveであり、確率分布を返すものではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/sampler-v2
Q71
qiskit.primitivesモジュールの目的として正しいものはどれか。
- A) 基本的な量子ゲートを提供する
- B) 量子計算実行のための簡略化されたインターフェースを提供する
- C) プリミティブな量子回路を作成する
- D) 基本的な量子状態を定義する
解答・解説
答え: B
qiskit.primitivesモジュールは、SamplerとEstimatorという2つの主要な計算タスク(サンプリングと期待値推定)に特化した、簡略化された実行インターフェースを提供する。
各選択肢について:
- A) 基本的なゲートの提供は
qiskit.circuit.libraryの役割。 - B) 正しい。 primitivesモジュールは簡略化された実行インターフェースを提供する。
- C) 「プリミティブな回路」という概念は誤解であり、primitivesは回路構築のためのモジュールではない。
- D) 量子状態の定義は
qiskit.quantum_infoの役割。
セクション6: Use the estimator primitive(配点12%)
Q72
Estimatorに渡す回路について、正しい制約はどれか。
- A) 必ず測定操作を含める
- B) 測定操作を含めてはならない
- C) 量子ビット数は観測量と一致しなくてよい
- D) パラメータ化ゲートは使用できない
解答・解説
答え: B
公式ガイドに「Estimatorに渡す回路は測定操作を含んではならない」と明記されている。Estimatorは回路が準備する量子状態に対する観測量の期待値を直接計算するため、測定によって状態を古典的なビット列に収縮させてしまうと必要な量子情報が失われる。
各選択肢について:
- A) これはSamplerの要件(測定必須)であり、Estimatorとは逆。
- B) 正しい。 Estimatorに渡す回路に測定は含めてはならない。
- C) 実際には観測量の量子ビット数は回路の量子ビット数と一致している必要がある。
- D) パラメータ化ゲート(Parameterを含む回路)はEstimatorでも通常に使用可能で、むしろVQEなど典型的な用途で使われる。
参考: https://quantum.cloud.ibm.com/docs/en/guides/simulate-with-qiskit-sdk-primitives
Q73
Estimatorのprecisionを0.015625から0.03125へ2倍にした場合、必要なshot数はどう変化するか。
- A) 2倍になる
- B) 変わらない
- C) 減少する
- D) 0になる
解答・解説
答え: C
必要なshot数はprecision(許容誤差)の2乗に反比例する。precisionを2倍にする(誤差の許容を粗くする)と、必要なshot数はその2乗、すなわち1/4に減少する。
各選択肢について:
- A) precisionを大きくする(誤差を粗く許容する)ことは、shot数を増やす方向とは逆の効果を持つ。
- B) precisionの値はshot数の計算に直接影響するため、変わらないという説明は誤り。
- C) 正しい。 precisionの2乗に反比例するのでshot数は減少する。
- D) shot数が完全にゼロになることはなく、あくまで減少するだけ。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-estimator-options
Q74
resilience_levelのデフォルト値はどれか。
- A) 0
- B) 1
- C) 2
- D) 3
解答・解説
答え: B
公式APIリファレンスにresilience_levelのデフォルトが1(測定誤り緩和のみを適用するレベル)であると明記されている。
各選択肢について:
- A) 0は誤り緩和なしのレベルで、デフォルトではない。
- B) 正しい。 resilience_levelデフォルトは1。
- C) 2はZNEなどを含む中間レベルで、デフォルトではない。
- D) 3は最も強力な誤り緩和(PEC)のレベルで、デフォルトではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-estimator-options
Q75
resilience_level(resilienceオプション)で利用できる誤り緩和技術はどれか。
- A) Pauli twirling
- B) Dynamical decoupling
- C) Zero Noise Extrapolation
- D) 完全な量子誤り訂正
解答・解説
答え: C
公式ガイド(Configure error mitigation)に、resilienceオプションで利用可能な技術としてZero Noise Extrapolation(ZNE)が挙げられている。ノイズを意図的に増幅した測定結果から、ノイズゼロの理想値を外挿で推定する手法。
各選択肢について:
- A) Pauli twirlingは
TwirlingOptionsという別カテゴリのオプションで制御される。 - B) Dynamical decouplingも
DynamicalDecouplingOptionsという別カテゴリのオプション。 - C) 正しい。 ZNEがresilienceオプションで利用可能な誤り緩和技術。
- D) 完全な量子誤り訂正は現状の実機では実用化されておらず、resilienceオプションの一部でもない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/configure-error-mitigation
Q76
ZneOptions.noise_factorsのデフォルト値はどれか。
- A)
(1,) - B)
(1,3,5) - C)
(0,1,2) - D)
(1,2,4,8)
解答・解説
答え: B
公式APIリファレンスにnoise_factorsのデフォルトが(1, 3, 5)と明記されている。ゲート折り畳みによってノイズを1倍・3倍・5倍に人為的に増幅した3点の測定結果から、ノイズゼロの極限を外挿で推定する。
各選択肢について:
- A) 単一の係数のみでは外挿ができないため、これはデフォルトではない。
- B) 正しい。 noise_factorsデフォルトは(1,3,5)。
- C) 0という係数はノイズの逆方向の増幅にあたり、実際のデフォルトには含まれない。
- D) 指数的な増加系列もデフォルトの値ではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/options-zne-options
Q77
EstimatorのPUBタプルの正しい形式はどれか。
- A)
(circuit, observable, parameter_values, backend) - B)
(circuit, observable, parameter_values, precision) - C)
(circuit, observable, shots, optimization_level) - D)
(circuit, observable, resilience_level, noise_model)
解答・解説
答え: B
Estimator V2 PUBの形式は(circuit, observables, parameter_values, precision)の4要素で構成される。circuit以外はオプションで、指定しなければデフォルト値が使われる。
各選択肢について:
- A) backendはPUBの要素ではなく、primitiveインスタンス自体の設定(コンストラクタ引数)。
- B) 正しい。 (circuit, observable, parameter_values, precision)が正しい形式。
- C) shotsとoptimization_levelはPUBの要素ではない(shotsはSamplerのPUB要素で、Estimatorはprecisionを使う)。
- D) resilience_levelとnoise_modelはprimitiveのoptions側で設定するものであり、PUBの要素ではない。
参考: https://quantum.cloud.ibm.com/docs/en/guides/primitive-input-output
Q78
EstimatorV2の結果の.data.stdsは何を表すか。
- A) 各期待値の標準偏差
- B) 使用した観測量のリスト
- C) 各ショットの生の測定結果
- D) 回路パラメータの標準値
解答・解説
答え: A
.data.evs(期待値)と対になる形で.data.stdsが提供され、各期待値に対応する標準偏差(統計的な不確かさ)を表す。
各選択肢について:
- A) 正しい。 .data.stdsは期待値の標準偏差を表す。
- B) 観測量のリストはPUBの入力であり、結果のdataには含まれない。
- C) 生の測定結果(ショットごとのビット列)はSamplerの領分であり、Estimatorの結果には含まれない。
- D) 回路パラメータの標準値という概念は存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/estimator-v2
Q79
EstimatorV2プリミティブが計算するものはどれか。
- A) 回路の深さ
- B) 観測量の期待値
- C) 確率分布
- D) ゲート忠実度
解答・解説
答え: B
Estimatorは回路が準備する量子状態に対する観測量の期待値を計算するprimitiveであり、これがSamplerとの根本的な役割の違い。
各選択肢について:
- A) 回路の深さ(depth)は
circuit.depth()のような回路自体のプロパティであり、Estimatorの計算対象ではない。 - B) 正しい。 Estimatorは観測量の期待値を計算する。
- C) 確率分布(測定結果の分布)を返すのはSamplerの役割。
- D) ゲート忠実度はキャリブレーションデータの一部であり、Estimatorが直接計算するものではない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/estimator-v2 / https://quantum.cloud.ibm.com/docs/en/guides/primitives
セクション7: Retrieve and analyze the results(配点10%)
Q80
過去に実行した単一のジョブを、そのジョブIDから再取得する正しい方法はどれか。
- A)
QiskitRuntimeService.jobs(job_id) - B)
QiskitRuntimeService.job(job_id) - C)
RuntimeJobV2.retrieve(job_id) - D)
Sampler.get_job(job_id)
解答・解説
答え: B
単一のジョブIDが分かっている場合は単数形のjob(job_id)メソッドを使う。複数形のjobs()は条件でフィルタリングした複数ジョブの一覧取得に使う。
各選択肢について:
- A)
jobs()(複数形)は条件フィルタリングでの一覧取得用のメソッドであり、単一ジョブIDの取得には不適切な使い方。 - B) 正しい。 単一ジョブIDは単数形のjob()メソッドで取得する。
- C)
RuntimeJobV2.retrieve()という名前のメソッドは存在しない。 - D)
Sampler.get_job()という名前のメソッドも存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/qiskit-runtime-service
Q81
RuntimeJobV2.status()と旧RuntimeJob.status()の違いとして正しい説明はどれか。
- A) RuntimeJobV2は文字列を返し、旧RuntimeJobはJobStatus列挙型を返す
- B) 両者は完全に同じ型を返す
- C) RuntimeJobV2にstatus()は存在しない
- D) 旧RuntimeJobの方が現在の標準
解答・解説
答え: A
公式リリースノートに「RuntimeJobは非推奨化された。V1・V2の主な違いはstatus()がJobStatus列挙型ではなく文字列を返す点」と明記されている。
各選択肢について:
- A) 正しい。 RuntimeJobV2は文字列を返し、旧RuntimeJobはJobStatus列挙型を返す。
- B) 戻り値の型が異なる点がまさにV1・V2間の主要な違いとして明記されている。
- C) RuntimeJobV2にもstatus()メソッドは存在し、文字列を返す。
- D) 非推奨(deprecated)になったのはむしろ旧来のRuntimeJobの方であり、RuntimeJobV2が現在の標準。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/runtime-job-v2
Q82
qiskit.providers.JobStatusに定義されている値として、存在しないものはどれか。
- A)
INITIALIZING - B)
QUEUED - C)
RUNNING - D)
PENDING
解答・解説
答え: D
公式APIリファレンスに定義されている値はINITIALIZING・QUEUED・VALIDATING・RUNNING・CANCELLED・DONE・ERRORの7種類であり、PENDINGという値は存在しない。
各選択肢について:
- A) INITIALIZINGは「ジョブが初期化中」を表す実在の値。
- B) QUEUEDも実在する値。
- C) RUNNINGも実在する値。
- D) 正しい(存在しない)。 PENDINGという値はJobStatusには定義されていない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.providers.JobStatus
Q83
Qiskit Runtimeのセッション(Session)の目的を説明するものとして正しいものはどれか。
- A) ユーザー入力に基づき量子アルゴリズムを自動生成する
- B) 実験結果をリアルタイムで可視化する
- C) 実機への一連の呼び出しをグループ化する
- D) 異なるバックエンド向けにコンパイル・最適化する
解答・解説
答え: C
セッションは、複数のジョブ呼び出しをまとめて実機への「一連のアクセス」としてグループ化する仕組みであり、反復的な量子・古典計算(VQEなど)を効率よく実行するために使われる。
各選択肢について:
- A) AIによるアルゴリズムの自動生成のような機能は存在しない。
- B) リアルタイム可視化は
qiskit.visualizationモジュールの役割で、セッションとは無関係。 - C) 正しい。 セッションは実機への一連の呼び出しをグループ化する。
- D) コンパイル・最適化はトランスパイラの役割であり、セッションとは別の機能。
参考: https://quantum.cloud.ibm.com/docs/en/guides/run-jobs-session
Q84
session.details()が返す辞書に含まれる正しい情報の組み合わせはどれか(2つ選ぶ想定)。
A) 回路の深さ、B) 最後に完了したジョブのタイムスタンプ、C) セッションの状態、D) primitiveのオプション、E) 各ジョブのPUB
- A) A,B
- B) B,C
- C) C,D
- D) D,E
解答・解説
答え: B
session.details()が返す辞書にはstate(セッションの状態)、last_job_completed(最後に完了したジョブのタイムスタンプ)などの情報が含まれる。回路の深さやprimitiveのオプション、PUBの内容そのものは含まれない。
各選択肢について:
- A) 回路の深さ(A)はsession.details()の内容には含まれない。
- B) 正しい。 B(タイムスタンプ)とC(状態)がsession.details()に含まれる正しい組み合わせ。
- C) primitiveのオプション(D)はsession.details()には含まれない。
- D) 各ジョブのPUB内容(E)もsession.details()には含まれない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/session#details
Q85
job.result()を呼び出したとき、ジョブがまだ完了していない場合の挙動はどれか。
- A) 即座にNoneが返る
- B) 例外が即座に発生する
- C) 完了までブロッキングし、完了後に結果を返す
- D) キャッシュされた結果を代わりに返す
解答・解説
答え: C
公式ドキュメントに「result()はブロッキングメソッドの一例であり、ジョブが完了するまで制御が返らない」と明記されている。
各選択肢について:
- A) 即座にNoneが返ることはなく、完了まで待機する。
- B) ジョブが失敗した場合には例外が発生するが、単に実行中というだけでは即座にエラーにはならない。
- C) 正しい。 result()はジョブが完了するまでブロッキング(待機)し、完了後に結果を返す。
- D) キャッシュされた古い結果を代わりに返すような挙動はしない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/runtime-job-v2
Q86
ジョブIDを使って以前提出したジョブを取得する正しい方法はどれか。
- A)
service.get_job(job_id) - B)
service.retrieve_job(job_id) - C)
service.job(job_id) - D)
service.load_job(job_id)
解答・解説
答え: C
QiskitRuntimeServiceの単一ジョブ取得メソッドはjob(job_id)(単数形)である。
各選択肢について:
- A)
get_job()という名前のメソッドは存在しない。 - B)
retrieve_job()という名前のメソッドも存在しない。 - C) 正しい。 service.job(job_id)が単一ジョブIDの取得の正しい方法。
- D)
load_job()という名前のメソッドも存在しない。
参考: https://quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/qiskit-runtime-service
セクション8: Operate with OpenQASM(配点6%)
Q87
qiskit.qasm3.dumps(qc)の戻り値の型として正しいものはどれか。
- A)
QuantumCircuitオブジェクト - B) OpenQASM 3文字列(str)
- C) バイト列(bytes)
- D) ファイルオブジェクト
解答・解説
答え: B
dumps()はQuantumCircuitをOpenQASM 3の文字列(str)にシリアライズする関数。ファイルに直接書き出したい場合はdump(circuit, stream)を使う。
各選択肢について:
- A) QuantumCircuitはdumps()への入力であり、戻り値ではない。
- B) 正しい。 dumps()はOpenQASM 3文字列(str)を返す。
- C) バイト列ではなく、テキスト形式の文字列として返される。
- D) ファイルオブジェクトを返すのではなく、文字列を返す(ファイルへの書き出しはdump()の役割)。
Q88
OpenQASM 3がサポートする古典データ型として正しいものはどれか。
- A)
complex - B)
class - C)
char - D)
enum(基本型として)
解答・解説
答え: A
OpenQASM 3の公式言語仕様にはint, uint, bool, bit, float, angle, complexなどの古典型が定義されている。complex(複素数)はOpenQASM 3で新たに追加された型。
各選択肢について:
- A) 正しい。 complexはOpenQASM 3でサポートされる古典型。
- B)
classという型はOpenQASM 3の基本型には存在しない。 - C)
charという型も基本型としては存在しない。 - D)
enumのような複合型は基本的な古典スカラー型のリストには含まれない(基本型として問われた場合には該当しない)。
Q89
以下のOpenQASM 3コードのletキーワードの役割として正しい説明はどれか。
qubit[2] one;
qubit[10] two;
let concatenated = one ++ two;
- A) コピーして新しい12量子ビットを確保する
- B) 連結した参照(エイリアス)を別名で参照できるようにする
- C) どちらか一方を選択する条件分岐
- D) テンソル積状態を計算する
解答・解説
答え: B
公式仕様に「letキーワードは、宣言済みの量子ビット・レジスタを別名(エイリアス)で参照できるようにする」と明記されている。++演算子は同じ型のレジスタを連結する演算子で、新しい量子ビットを確保するのではなく既存のビットへの参照を作る。
各選択肢について:
- A) 新規に量子ビットを複製・確保するわけではなく、あくまで既存ビットへの参照(エイリアス)を作る。
- B) 正しい。 letは連結した参照(エイリアス)を別名で参照できるようにする。
- C) 条件分岐とは無関係の構文。
- D) テンソル積状態の計算とは無関係で、あくまで古典的な参照の話。
Q90
以下のOpenQASM 3プログラムを実行したとき、iが最終的にとる値はどれか。
int[32] i = 0;
while (i < 10) {
i += 1;
if (i == 2) { continue; }
if (i == 4) { break; }
}
- A) 1
- B) 2
- C) 4
- D) 10
解答・解説
答え: C
iは1,2,3,4と増加し、i==2のときcontinueで次のループへ、i==4のときbreakでループを終了する。よって最終的な値は4。
各選択肢について:
- A) ループは1回で終了せず、複数回反復するため誤り。
- B) i==2の時点でcontinueするだけでループ自体は終了しないため、最終値にはならない。
- C) 正しい。 i==4のときbreakによりループが終了し、最終的な値は4。
- D) breakによりi=10になる前にループが終了するため誤り。
参考: https://openqasm.com/versions/3.0/language/classical.html
Q91
OpenQASM 3のgate定義構文について、正しい説明はどれか。
gate my_gate(theta) q {
rz(theta) q;
ry(theta/2) q;
}
- A) 量子ビットの初期化構文でありゲート定義には使えない
- B) 既存のゲートを組み合わせて新しいカスタムゲートを定義する構文
- C) 1量子ビットにしか適用できない
- D) qasm3.loads()では解釈できない
解答・解説
答え: B
公式仕様に「gate文は、既存の(組み込みまたは以前に定義した)ゲートの並びを通じて、識別子とユニタリ変換を関連付ける」と明記されている。
各選択肢について:
- A) gateは量子ビットの初期化ではなく、ユニタリ変換の定義に使われる構文。
- B) 正しい。 既存のゲートを組み合わせて新しいカスタムゲートを定義する構文。
- C) 複数量子ビットへのgate定義も可能であり、1量子ビットに限定されない。
- D) qiskit.qasm3.loads()はgate定義を含むOpenQASM 3プログラムを正しく解釈できる。
Q92
REST API経由でEstimatorジョブを投入する際、PUB内の回路をOpenQASM 3文字列としてそのまま渡すことについて、正しい説明はどれか。
- A) 受け付けず必ずQPY形式に変換が必要
- B) OpenQASM 3の文字列として直接指定できる
- C) OpenQASM 2のみサポートされる
- D) 必ずファイルとしてアップロードが必要
解答・解説
答え: B
Qiskit Runtime REST APIのPUBでは、回路をOpenQASM 3の文字列としてそのままリクエストボディに埋め込める。これによりPythonのQiskitオブジェクトを介さず、HTTPリクエストのみでジョブを投入できる。
各選択肢について:
- A) QPY形式への変換は必須ではなく、OpenQASM 3文字列を直接渡せる。
- B) 正しい。 OpenQASM 3の文字列として直接指定できる。
- C) OpenQASM 2に限定されるという制約はなく、OpenQASM 3もサポートされる。
- D) ファイルアップロードは必須ではなく、リクエストボディに文字列として埋め込める。
参考: https://quantum.cloud.ibm.com/docs/en/guides/execution-modes-rest-api
Q93
OpenQASM 3で5ビットの古典ビットレジスタを宣言する正しい構文はどれか。
- A)
creg myregister[5]; - B)
bit[5] myregister; - C)
classical[5] myregister; - D)
register bit myregister[5];
解答・解説
答え: B
OpenQASM 3では古典ビットレジスタはbit[size] 変数名;という構文で宣言する。cregはOpenQASM 2の構文であり、3では使われない。
各選択肢について:
- A)
cregはOpenQASM 2の宣言構文であり、OpenQASM 3ではbit型を使う。 - B) 正しい。 bit[5] myregister;がOpenQASM 3の正しい宣言構文。
- C)
classicalという型名は存在しない。 - D) この語順・構文はOpenQASM 3の正しい文法ではない。
採点の目安
| セクション | 出題数 | 本試験配点 |
|---|---|---|
| 1. 量子演算 | 27 | 16% |
| 2. 可視化 | 6 | 11% |
| 3. 回路作成 | 19 | 18% |
| 4. 回路実行 | 11 | 15% |
| 5. Sampler | 8 | 12% |
| 6. Estimator | 8 | 12% |
| 7. 結果取得 | 7 | 10% |
| 8. OpenQASM | 7 | 6% |
| 合計 | 93 | 100% |
配点の大きいセクション3(回路作成)・セクション1(量子演算)を優先的に復習することをお勧めします。