from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpile
from qiskit_aer import Aer
from qiskit.execute_function import execute
from qiskit import execute




# Înlocuiți acest token cu token-ul dvs. real de la IBM Q Experience
token = '214b328990079017b35a5f3bab61f47aceb66ddd8a84fd01aa230faf616c8d48e94da0255e827a4b08a0a1b7eebc845e888adcec742eb7541461dce0697d5067'
IBMQ.save_account(token, overwrite=True)
IBMQ.load_account()

provider = IBMQ.get_provider(hub='ibm-q')

# Crearea registrului cuantic și a celui clasic
qreg = QuantumRegister(2)
creg = ClassicalRegister(2)

# Crearea circuitului cuantic
circuit = QuantumCircuit(qreg, creg)

# Inițializarea într-o stare de suprapunere și înlănțuire
circuit.h(qreg[0])  # Poarta Hadamard pe primul qubit
circuit.cx(qreg[0], qreg[1])  # Înlănțuirea qubiților

# Măsurarea celui de-al doilea qubit
circuit.measure(qreg[1], creg[1])

# Alegerea celui mai disponibil backend
backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 2 and not x.configuration().simulator and x.status().operational == True))
print("Vom rula pe:", backend.name())

# Transpilarea circuitului pentru backend-ul selectat
transpiled_circuit = transpile(circuit, backend)

# Rularea circuitului
job = backend.run(transpiled_circuit)
print("Job ID: ", job.job_id())

# Așteptarea finalizării job-ului și obținerea rezultatelor
result = job.result()

# Afișarea rezultatelor sub forma de numărătoare
counts = result.get_counts(circuit)
print("Rezultatele măsurătorilor:", counts)
