Defina [matemáticas] f (S): = S ^ {f (S-1)} [/ matemáticas] para [matemáticas] s> 1 [/ matemáticas] y [matemáticas] f (1) = 1 [/ matemáticas].
Defina [math] g (S, N) [/ math] para que sea el entero menos positivo equivalente a [math] f (S) \ mod N [/ math].
Para calcular [matemática] g (S, N) [/ matemática], utilizaremos el teorema del totiente de Euler [1].
Establece que [matemáticas] S ^ {\ phi (N)} \ equiv 1 \ mod N [/ matemáticas]
- ¿Cuál será el resto cuando [matemáticas] 6457 ^ {({76} ^ {57})} [/ matemáticas] se divide por [matemáticas] 23 [/ matemáticas]?
- ¿Para cuántos enteros positivos n es 3n + 81 el cuadrado de un entero?
- Cómo resolver: [matemática] 25x – 108y = 1 [/ matemática] con [matemática] x [/ matemática] y [matemática] y [/ matemática] enteros
- ¿Cuál es la diferencia entre ‘Infinito’ y ‘no definido’?
- ¿Cuál es el resto cuando [matemáticas] 3 ^ {48} [/ matemáticas] se divide por 10?
[math] \ phi (N) [/ math] es el número de enteros menores que [math] N [/ math] que son relativamente primos para [math] N [/ math].
Esto significa que si [math] a \ equiv b \ mod \ phi (N) [/ math], entonces [math] S ^ a \ equiv S ^ b \ mod N [/ math]
Entonces [matemáticas] g (S, N) \ equiv S ^ {g (S-1, \ phi (N))} [/ matemáticas]
Esto significa que puede resolver su problema muy fácilmente con recursividad.
Puede que le preocupe que tendrá que hacer llamadas de función [matemáticas] S [/ matemáticas] incluso cuando [matemáticas] S [/ matemáticas] sea casi [matemáticas] 10 ^ 9 [/ matemáticas], pero no lo hace porque [ matemática] g (S, 1) = 0 [/ matemática] y para todos [matemática] N [/ matemática], [matemática] \ phi ^ k (N) [/ matemática] converge a [matemática] 1 [/ matemática] (y lo hace con bastante rapidez).
De hecho, usando [math] g (S, 1) = 0 [/ math] como el caso base para su recursión, solo necesitará [math] O (\ log (N)) [/ math] llamadas a funciones.
Notas al pie
[1] Función totient de Euler – Wikipedia