# 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))