Basic Quantum Circuits

Your First Quantum Circuit #

Let’s start by creating a simple quantum circuit in Qiskit:

from qiskit import QuantumCircuit

# Create a quantum circuit with 2 qubits
qc = QuantumCircuit(2)

# Add a Hadamard gate to the first qubit
qc.h(0)

# Add a CNOT gate with qubit 0 as control and qubit 1 as target
qc.cx(0, 1)

# Visualize the circuit
print(qc)

This creates a Bell state, one of the fundamental entangled quantum states!

Understanding Quantum Circuits #

Circuit Components #

A quantum circuit consists of:

  1. Qubits: The quantum registers (analogous to classical bits)
  2. Gates: Operations that manipulate qubits
  3. Measurements: Reading the final state of qubits
  4. Classical Bits: Storage for measurement results

Creating a Circuit #

from qiskit import QuantumCircuit

# Create circuit with 3 qubits and 3 classical bits
qc = QuantumCircuit(3, 3)

Common Quantum Gates #

Single-Qubit Gates #

Pauli Gates

qc = QuantumCircuit(1)

# X gate (NOT gate) - flips |0⟩ to |1⟩
qc.x(0)

# Y gate - rotation around Y-axis
qc.y(0)

# Z gate - phase flip
qc.z(0)

Hadamard Gate

# Creates superposition
qc.h(0)  # Transforms |0⟩ to (|0⟩ + |1⟩)/√2

Phase Gates

import math

# S gate (phase gate)
qc.s(0)

# T gate
qc.t(0)

# Arbitrary phase rotation
qc.p(math.pi/4, 0)

Rotation Gates

# Rotation around X-axis
qc.rx(math.pi/2, 0)

# Rotation around Y-axis
qc.ry(math.pi/2, 0)

# Rotation around Z-axis
qc.rz(math.pi/2, 0)

Two-Qubit Gates #

CNOT (Controlled-NOT)

qc = QuantumCircuit(2)
# Control qubit 0, target qubit 1
qc.cx(0, 1)

CZ (Controlled-Z)

qc.cz(0, 1)

SWAP Gate

qc.swap(0, 1)

Controlled Phase

qc.cp(math.pi/4, 0, 1)

Multi-Qubit Gates #

Toffoli (CCX) Gate

qc = QuantumCircuit(3)
# Two control qubits (0 and 1), target qubit 2
qc.ccx(0, 1, 2)

Measuring Qubits #

qc = QuantumCircuit(2, 2)

# Add some gates
qc.h(0)
qc.cx(0, 1)

# Measure qubits into classical bits
qc.measure([0, 1], [0, 1])  # Measure qubits 0,1 into classical bits 0,1

# Or measure all qubits
qc.measure_all()

Circuit Visualization #

Text Representation #

print(qc)

Matplotlib Drawer #

qc.draw('mpl')  # Creates a nice matplotlib figure

Text Drawing with Symbols #

qc.draw('text')  # ASCII art representation

LaTeX-style Drawing #

qc.draw('latex')  # Publication-quality diagrams

Running Circuits: Simulators #

Using Aer Simulator #

from qiskit_aer import AerSimulator
from qiskit import transpile

# Create a quantum circuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

# Use the Aer simulator
simulator = AerSimulator()

# Transpile the circuit for the simulator
transpiled_qc = transpile(qc, simulator)

# Run the circuit
job = simulator.run(transpiled_qc, shots=1000)

# Get results
result = job.result()
counts = result.get_counts()

print(counts)
# Output: {'00': ~500, '11': ~500}

Visualizing Results #

from qiskit.visualization import plot_histogram

# Plot the measurement results
plot_histogram(counts)

Complete Example: Bell State #

Here’s a complete example creating and measuring a Bell state:

from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
import matplotlib.pyplot as plt

# Create circuit
qc = QuantumCircuit(2, 2)

# Create Bell state
qc.h(0)          # Put qubit 0 in superposition
qc.cx(0, 1)      # Entangle qubits 0 and 1

# Measure
qc.measure([0, 1], [0, 1])

# Visualize circuit
print(qc)

# Simulate
simulator = AerSimulator()
job = simulator.run(qc, shots=1000)
result = job.result()
counts = result.get_counts()

# Display results
print("\nMeasurement results:", counts)
plot_histogram(counts)
plt.show()

Useful Circuit Methods #

# Get circuit depth
depth = qc.depth()

# Count operations
op_count = qc.count_ops()

# Get number of qubits
num_qubits = qc.num_qubits

# Compose circuits
qc1 = QuantumCircuit(2)
qc2 = QuantumCircuit(2)
qc1.h(0)
qc2.cx(0, 1)
combined = qc1.compose(qc2)  # Concatenate circuits

# Add barriers (for visualization)
qc.barrier()

Practice Exercises #

Try creating these circuits on your own:

  1. Superposition: Put a single qubit in equal superposition
  2. Bell States: Create all four Bell states
  3. GHZ State: Create a 3-qubit GHZ state
  4. Quantum Teleportation: Implement a simple teleportation circuit

Next Steps #

Now that you understand basic circuits, you’re ready to:

  • Implement quantum algorithms
  • Work with more complex gate sequences
  • Optimize circuits for real hardware
  • Explore quantum error correction

In the next section, we’ll explore how to implement fundamental quantum algorithms using Qiskit!