Shor’s Algorithm Tutorial

This tutorial demonstrates factoring integers using Shor’s algorithm.

Basic Factoring

from microquantum import ShorsAlgorithm

# Factor 15
algo = ShorsAlgorithm(15, seed=42)
result = algo.run()

print(f"Factors of {result.n}: {result.factors}")
print(f"Period found: {result.period}")
print(f"Base used: {result.a}")
p, q = result.factors
assert p * q == 15

Factoring Larger Numbers

# Factor 35
algo = ShorsAlgorithm(35, seed=42)
result = algo.run()
print(f"35 = {result.factors[0]} x {result.factors[1]}")

# Factor 21
algo = ShorsAlgorithm(21, seed=42)
result = algo.run()
print(f"21 = {result.factors[0]} x {result.factors[1]}")

Inspecting the Circuit

You can also examine the quantum circuit used for order-finding:

algo = ShorsAlgorithm(15, seed=42)
qc = algo.build_circuit(a=7)
print(f"Circuit: {qc.num_qubits} qubits, {qc.num_gates} gates")

Bernstein-Vazirani Algorithm

Find a hidden bitstring using a single oracle query:

from microquantum import BernsteinVazirani

bv = BernsteinVazirani("1011")
result = bv.run()
print(f"Secret: {result.secret_string}")
print(f"Measured: {result.measured}")
assert result.correct

Deutsch-Jozsa Algorithm

Determine if a function is constant or balanced:

from microquantum import DeutschJozsa

# Test a balanced function
dj = DeutschJozsa(n_qubits=3, balanced=True)
result = dj.run()
print(f"Function is constant: {result.is_constant}")  # False

# Test a constant function
dj = DeutschJozsa(n_qubits=3, balanced=False)
result = dj.run()
print(f"Function is constant: {result.is_constant}")  # True