from classiq.qmod import (
CInt,
Output,
QArray,
QBit,
QNum,
allocate,
inplace_prepare_int,
modular_exp,
qfunc,
hadamard_transform,
invert,
qft,
Constraints,
create_model,
write_qmod,
Preferences,
show,
synthesize,
execute,
)
MODULUS_NUM = 5
BASE = 3
EXPONENT = 2
MODULUS_ORDER = MODULUS_NUM - 1
def discrete_log_oracle(
base: CInt,
exponent: CInt,
modulus: CInt,
order: CInt,
x1: QArray[QBit],
x2: QArray[QBit],
func_res: Output[QArray[QBit]],
) -> None:
reg_len = ceil(log(modulus, 2))
allocate(reg_len, func_res)
inplace_prepare_int(1, func_res)
modular_exp(modulus, exponent, func_res, x1)
modular_exp(modulus, base, func_res, x2)
We can improve the functions for better code readability like this.