Sample Papers
Paper 2
Fundamentals of Quantum Computing Using Qiskit v2.X Developer
| Questions | 34 (half-length paper; real exam is 68) |
| Time limit | 45 minutes (~79 seconds/question) |
| Passing target | 24 / 34 ≈ 69% (mirrors the real 47/68 threshold) |
| Answer format | Single best answer A–D unless a question says "Choose TWO" |
Instructions
- This paper is code-output heavy — read each snippet as the interpreter would. Assume
qiskit2.x,qiskit-ibm-runtime(V2 primitives), andqiskit-aerare installed. - Qiskit's little-endian convention applies everywhere: qubit 0 is the rightmost character in bitstrings, Pauli strings, and statevector labels.
- Numerical outputs are exact up to floating-point rounding; pick the closest option.
- No notes, no interpreter. Time yourself. Answers are in
paper-02-answers.md.
Section 1 — Create Quantum Circuits (Q1–Q6)
Q1. What does this code print?
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.barrier()
qc.measure(0, 0)
qc.measure(1, 1)
print(qc.depth())- A. 2
- B. 3
- C. 4
- D. 5
Q2. What does this code print?
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.s(0)
inv = qc.inverse()
print(inv.data[0].operation.name)- A.
s - B.
z - C.
sdg - D. It raises an error — S has no inverse
Q3. qc has quantum register qr and a classical register cr, with a mid-circuit measurement already stored in cr. Which snippet applies an X gate to qubit 1 only when cr holds the value 1, using the Qiskit 2.x API?
- A.
with qc.if_test((cr, 1)): qc.x(1) - B.
qc.x(1).c_if(cr, 1) - C.
qc.if_test(cr == 1, qc.x, 1) - D.
if cr == 1: qc.x(1)
Q4. After this code runs, what is the rotation angle of the rx gate in qc2?
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
a = Parameter('a')
b = Parameter('b')
qc = QuantumCircuit(1)
qc.ry(b, 0)
qc.rx(a, 0)
qc2 = qc.assign_parameters([1.0, 2.0])- A. 1.0
- B. 2.0
- C. It stays unbound
- D. It raises an error — a list cannot be used, only a dict
Q5. What does this code print (values rounded)?
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
a = QuantumCircuit(1)
a.x(0)
b = QuantumCircuit(2)
b.h(0)
qc = a.tensor(b)
print(Statevector.from_instruction(qc).probabilities_dict())- A.
{'001': 0.5, '011': 0.5} - B.
{'100': 1.0} - C.
{'010': 0.5, '110': 0.5} - D.
{'100': 0.5, '101': 0.5}
Q6. Which snippet correctly produces an ISA circuit for backend in Qiskit v2.x?
- A.
isa = qc.transpile(backend, optimization_level=3) - B.
pm = generate_preset_pass_manager(optimization_level=3, backend=backend); isa = pm.run(qc) - C.
isa = qiskit.execute(qc, backend, optimization_level=3) - D.
isa = qc.decompose(reps=3)
Section 2 — Perform Quantum Operations (Q7–Q12)
Q7. What does this code print?
from qiskit.quantum_info import Statevector, SparsePauliOp
op = SparsePauliOp.from_list([("IZ", 1.0)])
sv = Statevector.from_label('01')
print(sv.expectation_value(op))- A.
(1+0j) - B.
0j - C.
(-1+0j) - D. It raises an error — dimensions do not match
Q8. What does this code print?
from qiskit.quantum_info import Pauli
print(Pauli('X').commutes(Pauli('Z')), Pauli('XX').commutes(Pauli('ZZ')))- A.
False False - B.
False True - C.
True True - D.
True False
Q9. What does this code print (values rounded)?
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.x(0)
print(Statevector.from_instruction(qc).probabilities_dict())- A.
{'01': 0.5, '10': 0.5} - B.
{'00': 0.5, '11': 0.5} - C.
{'11': 1.0} - D.
{'01': 1.0}
Q10. What does this code print?
from qiskit import QuantumCircuit
from qiskit.quantum_info import Operator, Pauli
qc1 = QuantumCircuit(1)
qc1.h(0)
qc1.x(0)
qc1.h(0)
print(Operator(qc1).equiv(Operator(Pauli('Z'))))- A.
True - B.
False - C.
None - D. It raises an error — a Pauli cannot be converted to an Operator
Q11. What does this code print?
from qiskit.quantum_info import SparsePauliOp
op = SparsePauliOp.from_sparse_list([("Z", [1], 2.0)], num_qubits=3)
print(op.paulis)- A.
['ZII'] - B.
['IZI'] - C.
['IIZ'] - D.
['ZZZ']
Q12. What value does this code print (to the nearest option)?
from qiskit.quantum_info import Statevector, state_fidelity
print(state_fidelity(Statevector.from_label('+'), Statevector.from_label('0')))- A. 0.0
- B. 0.707
- C. 0.5
- D. 1.0
Section 3 — Run Quantum Circuits (Q13–Q17)
Q13. What does this code print?
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
backend = FakeManilaV2()
print(backend.num_qubits)- A. 2
- B. 27
- C. 5
- D. 127
Q14. Which snippet correctly runs a sampler inside a session?
- A.
with Session(backend=backend) as session: sampler = SamplerV2(mode=session); job = sampler.run([isa]) - B.
session = Session(); job = SamplerV2().run(session, [isa]) - C.
with Session(backend=backend) as session: sampler = Sampler(session); job = sampler.run(circuits=[isa]) - D.
sampler = SamplerV2(backend=Session(backend))
Q15. You must run 200 fully independent circuits (no circuit depends on another's results) and want them scheduled efficiently together. Which execution mode fits best?
- A. Session mode
- B. Batch mode
- C. Job mode, one job per circuit
- D. A
while_loopinside one circuit
Q16. What does this code print?
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()
sampler = StatevectorSampler()
job = sampler.run([(qc, None, 2048)], shots=100)
print(job.result()[0].data.meas.num_shots)- A. 100
- B. 1024
- C. It raises an error — shots may only be set in one place
- D. 2048
Q17. A colleague submits a raw h/cx circuit through EstimatorV2 to a real IBM backend whose basis is {ecr, id, rz, sx, x}. What happens?
- A. The service transpiles it to the basis automatically
- B. It executes with a warning
- C. The job errors out — V2 primitives require ISA circuits matching the backend target
- D. Only the
cxgates are rewritten; the rest run as-is
Section 4 — Use the Sampler Primitive (Q18–Q21)
Q18. What does this code print?
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.primitives import StatevectorSampler
qr = QuantumRegister(2)
ca = ClassicalRegister(1, 'a')
cb = ClassicalRegister(1, 'b')
qc = QuantumCircuit(qr, ca, cb)
qc.x(0)
qc.measure(0, ca[0])
qc.measure(1, cb[0])
res = StatevectorSampler().run([qc], shots=100).result()[0]
print(res.data.a.get_counts())- A.
{'0': 100} - B.
{'1': 100} - C.
{'10': 100} - D. It raises
AttributeError— the data is underres.data.meas
Q19. What does this code print?
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()
res = StatevectorSampler().run([qc], shots=8).result()[0]
print(len(res.data.meas.get_bitstrings()), res.data.meas.num_bits)- A.
8 1 - B.
1 8 - C.
8 2 - D.
16 1
Q20. Which snippet enables dynamical decoupling with the XY4 sequence on a qiskit_ibm_runtime SamplerV2?
- A.
sampler.options.dynamical_decoupling.enable = True; sampler.options.dynamical_decoupling.sequence_type = "XY4" - B.
sampler.options.resilience_level = 1 - C.
sampler.set_options(dynamical_decoupling="XY4") - D.
sampler.run(pubs, dynamical_decoupling="XY4")
Q21. A Bell-state circuit (h(0); cx(0, 1); measure_all()) is sampled with 1024 shots on an ideal simulator. Which counts dictionary is a plausible output?
- A.
{'00': 1024} - B.
{'00': 261, '01': 259, '10': 250, '11': 254} - C.
{'00': 532, '11': 492} - D.
{'01': 532, '10': 492}
Section 5 — Use the Estimator Primitive (Q22–Q25)
Q22. What value does this code print (to the nearest option)?
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.primitives import StatevectorEstimator
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
job = StatevectorEstimator().run([(qc, SparsePauliOp('ZZ'))])
print(job.result()[0].data.evs)- A. 1.0
- B. 0.0
- C. -1.0
- D. 0.5
Q23. What does this code print?
import numpy as np
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.quantum_info import SparsePauliOp
from qiskit.primitives import StatevectorEstimator
theta = Parameter('t')
qc = QuantumCircuit(1)
qc.ry(theta, 0)
job = StatevectorEstimator().run([(qc, SparsePauliOp('Z'), [[0.0], [np.pi]])])
print(job.result()[0].data.evs)- A.
[-1. 1.] - B.
[ 1. -1.] - C.
[0. 0.] - D.
[1. 1.]
Q24. qc is transpiled to isa for a real backend and obs = SparsePauliOp('ZZ'). Which snippet submits a correct EstimatorV2 job?
- A.
EstimatorV2(mode=backend).run([(isa, obs)]) - B.
EstimatorV2(mode=backend).run([(qc, obs)]) - C.
Estimator(backend).run(circuits=[isa], observables=[obs]) - D.
EstimatorV2(mode=backend).run([(isa, obs.apply_layout(isa.layout))])
Q25. (Choose TWO.) Which two techniques are error suppression (applied before/during execution) rather than error mitigation (classical post-processing)?
- A. Dynamical decoupling
- B. Zero-noise extrapolation (ZNE)
- C. Pauli twirling
- D. Probabilistic error cancellation (PEC)
Section 6 — Visualize Circuits, Measurements, and States (Q26–Q29)
Q26. What does qc.draw('text') output for this circuit?
qc = QuantumCircuit(2)
qc.h(1)
qc.cx(1, 0)- A.
┌───┐
q_0: ┤ H ├──■──
└───┘┌─┴─┐
q_1: ─────┤ X ├
└───┘- B.
┌───┐
q_0: ─────┤ X ├
┌───┐└─┬─┘
q_1: ┤ H ├──■──
└───┘- C.
┌───┐
q_0: ┤ H ├──────
└───┘┌───┐
q_1: ─────┤ X ├
└───┘- D.
┌───┐
q_0: ──■──┤ H ├
┌─┴─┐└───┘
q_1: ┤ X ├─────
└───┘Q27. A 2-qubit circuit run on real hardware returns {'00': 502, '11': 489, '01': 18, '10': 15}. Which preparation is most consistent with this histogram?
- A.
h(0); h(1)— uniform superposition - B.
h(0); cx(0, 1)— Bell state, with readout noise - C.
x(0); x(1)— the |11⟩ state - D.
h(0); cx(0, 1); x(0)— the |Ψ+⟩ Bell state
Q28. For the 2-qubit circuit consisting only of h(0), what does plot_bloch_multivector(Statevector.from_instruction(qc)) show?
- A. Qubit 0 along +X, qubit 1 along +Z
- B. Qubit 0 along +Z, qubit 1 along +X
- C. Both qubits along +X
- D. Both vectors at the center (zero length)
Q29. Which visualization renders the real and imaginary parts of a state's density matrix as two 3D bar plots ("skyscrapers")?
- A.
plot_state_qsphere - B.
plot_state_paulivec - C.
plot_bloch_multivector - D.
plot_state_city
Section 7 — Retrieve and Analyze Results (Q30–Q32)
Q30. From {'00': 400, '11': 400, '01': 100, '10': 100} over 1000 shots, what is the estimated ⟨ZZ⟩?
- A. 0.8
- B. 0.2
- C. 0.6
- D. -0.6
Q31. Which statement about V2 primitive job execution is correct?
- A.
primitive.run(pubs)blocks until the job completes on the QPU - B.
primitive.run(pubs)returns a job immediately;job.result()blocks until results are available - C. Results must be fetched with
job.get_counts()before the session closes - D.
job.status()triggers execution of a queued job
Q32. What does this code print?
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
circuits = []
for gate in ['i', 'x', 'h']:
qc = QuantumCircuit(1)
if gate == 'x':
qc.x(0)
elif gate == 'h':
qc.h(0)
qc.measure_all()
circuits.append(qc)
result = StatevectorSampler().run(circuits, shots=10).result()
print(len(result))- A. 1
- B. 10
- C. 3
- D. 30
Section 8 — Operate with OpenQASM (Q33–Q34)
Q33. A circuit built with QuantumCircuit(2, 2), a Bell-state preparation, and measure([0, 1], [0, 1]) is exported with qiskit.qasm3.dumps(qc). Which line appears in the output?
- A.
measure q[0] -> c[0]; - B.
creg c[2]; - C.
qubit q[2]; - D.
c[0] = measure q[0];
Q34. This OpenQASM 2 program is loaded with qiskit.qasm2.loads and run on an ideal simulator with 100 shots. What are the counts?
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
x q[0];
measure q[0] -> c[1];
measure q[1] -> c[0];- A.
{'01': 100} - B.
{'10': 100} - C.
{'11': 100} - D.
{'00': 100}
End of Paper 02 — check your work against paper-02-answers.md.