Skip to content
Kartikey Purohit
← Course overview

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

  1. This paper is code-output heavy — read each snippet as the interpreter would. Assume qiskit 2.x, qiskit-ibm-runtime (V2 primitives), and qiskit-aer are installed.
  2. Qiskit's little-endian convention applies everywhere: qubit 0 is the rightmost character in bitstrings, Pauli strings, and statevector labels.
  3. Numerical outputs are exact up to floating-point rounding; pick the closest option.
  4. 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_loop inside 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 cx gates 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 under res.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.