-
-
Notifications
You must be signed in to change notification settings - Fork 50.3k
Expand file tree
/
Copy pathgrover_search_algorithm.py
More file actions
52 lines (38 loc) · 1.65 KB
/
grover_search_algorithm.py
File metadata and controls
52 lines (38 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import importlib.util
import math
def grover_search(number_of_qubits: int = 2):
"""
Build and simulate Grover's search algorithm.
"""
if importlib.util.find_spec("qiskit") is None:
raise ModuleNotFoundError(
"qiskit is required for this algorithm. "
"Install it with: pip install qiskit qiskit-aer"
)
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute
if isinstance(number_of_qubits, str):
raise TypeError("number of qubits must be an integer.")
if number_of_qubits <= 0:
raise ValueError("number of qubits must be > 0.")
if math.floor(number_of_qubits) != number_of_qubits:
raise ValueError("number of qubits must be exact integer.")
if number_of_qubits > 10:
raise ValueError("number of qubits too large to simulate (>10).")
qr = QuantumRegister(number_of_qubits, "qr")
cr = ClassicalRegister(number_of_qubits, "cr")
quantum_circuit = QuantumCircuit(qr, cr)
quantum_circuit.h(qr)
quantum_circuit.h(number_of_qubits - 1)
quantum_circuit.mcx(list(range(number_of_qubits - 1)), number_of_qubits - 1)
quantum_circuit.h(number_of_qubits - 1)
quantum_circuit.h(qr)
quantum_circuit.x(qr)
quantum_circuit.h(number_of_qubits - 1)
quantum_circuit.mcx(list(range(number_of_qubits - 1)), number_of_qubits - 1)
quantum_circuit.h(number_of_qubits - 1)
quantum_circuit.x(qr)
quantum_circuit.h(qr)
quantum_circuit.measure(qr, cr)
backend = Aer.get_backend("qasm_simulator")
job = execute(quantum_circuit, backend, shots=10000)
return job.result().get_counts(quantum_circuit)