Hola, estuve haciendo un par de cosas y tuve que usar un algoritmo de exponenciacion binaria y modular pero no queria que fuera recursivo asi que luego de algunos intentos, esto fue lo que consegui, espero les pueda servir de ayuda, tanto como a mi(aunque esta en java se entiende si manejas otro lenguaje :P) :
public static int expomod(int a, long b,int mod){
int res = 1;
while(b>0){
if((b&1)==1)
res=(a*res)%mod;
b>>=1;
a=((a%mod)*(a%mod))%mod;
}
return res;
}
y el algoritmo en python es:
def ex(a, b,m): r = 1 while(b): if(b&1): r = (r*a)%m b>>=1 a = ((a%m)*(a%m))%m return r
La verdad luego de ver el algoritmo recursivo, se entiende este. Lo que se hace es cambiar la recursividad a las variables, por decirlo de alguna forma. Saludos y espero sus comentarios!
Un buen tutorial donde se tratan a fondo otros algoritmos relacionados es este de topcoder.
Nota: un problema en donde se puede aplicar este algoritmo es este.
No hay comentarios:
Publicar un comentario