from qiskit import QuantumCircuit, Aer, execute
from qiskit.visualization import plot_histogram
import numpy as np
# --- CONFIGURAÇÃO ---
n_bits = 4
solution = "1011" # chave simulada
# --- ORÁCULO ---
def oracle():
qc = QuantumCircuit(n_bits)
# Marca o estado da solução invertendo o bit final (fase -1)
qc.x([i for i, b in enumerate(solution) if b == "0"])
qc.h(n_bits - 1)
qc.mct(list(range(n_bits - 1)), n_bits - 1)
qc.h(n_bits - 1)
qc.x([i for i, b in enumerate(solution) if b == "0"])
return qc
# --- DIFUSOR (AMPLIFICAÇÃO) ---
def diffuser():
qc = QuantumCircuit(n_bits)
qc.h(range(n_bits))
qc.x(range(n_bits))
qc.h(n_bits - 1)
qc.mct(list(range(n_bits - 1)), n_bits - 1)
qc.h(n_bits - 1)
qc.x(range(n_bits))
qc.h(range(n_bits))
return qc
# --- ALGORITMO DE GROVER ---
qc = QuantumCircuit(n_bits, n_bits)
qc.h(range(n_bits))
iterations = int(np.pi/4 * np.sqrt(2**n_bits))
for _ in range(iterations):
qc.compose(oracle(), inplace=True)
qc.compose(diffuser(), inplace=True)
qc.measure(range(n_bits), range(n_bits))
# --- EXECUÇÃO ---
backend = Aer.get_backend('qasm_simulator')
result = execute(qc, backend, shots=1024).result()
counts = result.get_counts()
print("Resultado da busca:")
print(counts)






No comments:
Post a Comment