86 lines
2.3 KiB
Python
86 lines
2.3 KiB
Python
# https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/algorithms/deutsch_jozsa.ipynb
|
|
# https://github.com/mrtkp9993/QuantumComputingExamples
|
|
# https://github.com/DavitKhach/quantum-algorithms-tutorials/blob/master/quantum_parallelism_Deutsch_Jozsa.ipynb
|
|
# https://fullstackquantumcomputation.tech/blog/deutsch-algorithm/
|
|
# https://www.mlq.ai/quantum-programming-with-qiskit/
|
|
# https://github.com/przecze/deutschs_algorithm_in_qiskit_vs_cirq/blob/main/common.py
|
|
from random import randint
|
|
|
|
from qiskit import QuantumCircuit,QuantumRegister,ClassicalRegister
|
|
from qiskit import BasicAer,IBMQ
|
|
from qiskit.tools.monitor import job_monitor
|
|
|
|
from qiskit import transpile
|
|
|
|
from quantum_runner import quantum_simulate,setup_IBM
|
|
|
|
|
|
# количество создаваемых битов
|
|
n = 1
|
|
|
|
# создаем функции
|
|
ff = randint(0, n)
|
|
|
|
if ff !=0:
|
|
randint(1,2**n)
|
|
|
|
# создание n-кубитов в системе
|
|
|
|
qr = QuantumRegister(n+1)
|
|
|
|
# создание n классических битов, для записи измерений
|
|
|
|
cr = ClassicalRegister(n)
|
|
|
|
circuit = QuantumCircuit(qr,cr)
|
|
|
|
# создаем вспомогательные кубиты
|
|
|
|
circuit.x(qr[n])
|
|
|
|
circuit.h(qr[n])
|
|
|
|
# Барьер нужен для группировки отдельных частей цепи
|
|
circuit.barrier()
|
|
|
|
# Первая часть, это подготовка суперпозиции состояний.
|
|
# Для этого используем вентиль Адамара
|
|
|
|
circuit.h(qr[0])
|
|
circuit.h(qr[1])
|
|
|
|
circuit.barrier()
|
|
|
|
# Создаем квантовый оракул, используя контроллер
|
|
circuit.cx(qr[0],qr[1])
|
|
|
|
circuit.barrier()
|
|
|
|
# Применяем вентиль уже к оракулу
|
|
|
|
for i in range(n):
|
|
circuit.h(qr[i])
|
|
|
|
circuit.barrier()
|
|
|
|
# Измеряем кубит
|
|
|
|
for i in range(n):
|
|
circuit.measure(qr[i],cr[i])
|
|
|
|
# Запустим локально
|
|
|
|
backend = BasicAer.get_backend("qasm_simulator")
|
|
results = quantum_simulate(circuit,backend,True)
|
|
results = list(results.keys())
|
|
|
|
print(circuit)
|
|
print(f"q({ff})=",results)
|
|
|
|
#setup_IBM()
|
|
#provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
|
|
#backend = provider.get_backend('ibmq_lima')
|
|
#job_monitor(quantum_simulate(circuit,backend), interval=2)
|
|
|
|
#print(quantum_simulate(circuit,backend,True))
|