from reduced_residue_system import reducedResidueSystem
from factorization import factorization
from Euler_totient_function import EulerTotientFunction
defprimitiveRoot(m:int):try:int(m)if m <1:returnNoneelif m==2:return[1]else:
phi = EulerTotientFunction(m)
factorizationDict = factorization(phi)
reducedResidueSystemList = reducedResidueSystem(m)
reducedResidueSystemListPhi = reducedResidueSystem(phi)
exponential =[]for k in factorizationDict:
k =int(k)
exponential.append(phi//k)for r in reducedResidueSystemList:
isPrimitiveRoot =1for e in exponential:if r**e % m ==1:
isPrimitiveRoot =0breakif isPrimitiveRoot:
retList =[]for e in reducedResidueSystemListPhi:
retList.append(r**e % m)return retList
returnNoneexcept Exception as e:print(e)returnNone