Tengo un algoritmo para las raíces primitivas para el número de entrada $n$ que creo que es $O(n)$ actualmente. También tengo algoritmos separados para $\varphi(n)$ y $factorise(n)$ que creo que son ambos $O(\sqrt{n})$ cuyos resultados se utilizan en mi algoritmo de raíz primitiva.
La raíz primitiva alg se basa en esta entrada de Wikipedia :
En primer lugar, calcule $\varphi(n)$ . A continuación, determine los diferentes factores primos de $\varphi(n)$ , digamos que $p_1, \cdots, p_k$ . Ahora, para cada elemento m de $\mathbb{Z}_n^*$ , computa $$m^{\varphi(n)/p_i}\pmod{n}$$ para $i=1, \cdots,k$ Utilizando un algoritmo rápido de exponenciación modular, como la exponenciación por cuadratura.
Un número $m$ para los que estos $k$ resultados son todos diferentes de $1$ es una raíz primitiva.
Pregunta:
Estoy buscando ejemplos de algoritmos eficientes para las raíces primitivas donde la complejidad del tiempo es $\leq O(\sqrt{n})$ .
He encontrado muchos ejemplos de algoritmos que encuentran raíces primitivas en línea, sin embargo no tienen la complejidad de tiempo señalada.