
import argparse
from qiskit import QuantumCircuit, execute, Aer

def create_qrng_circuit(num_bits):
    """Creates a quantum circuit for generating random bits."""
    circuit = QuantumCircuit(num_bits, num_bits)
    circuit.h(range(num_bits))
    circuit.measure(range(num_bits), range(num_bits))
    return circuit

def generate_random_number(num_bits):
    """Generates a random number of a specified bit length using a quantum simulator."""
    circuit = create_qrng_circuit(num_bits)

    # Execute the circuit on a simulator
    backend = Aer.get_backend('qasm_simulator')
    job = execute(circuit, backend, shots=1)
    result = job.result()
    counts = result.get_counts(circuit)

    # The result is a string of bits, convert it to an integer
    random_bits = list(counts.keys())[0]
    return int(random_bits, 2)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Quantum Random Number Generator")
    parser.add_argument("num_bits", type=int, nargs='?', default=4, help="Number of bits for the random number")
    args = parser.parse_args()

    random_number = generate_random_number(args.num_bits)
    print(f"Generated {args.num_bits}-bit random number: {random_number}")
