/****************************************************************************/
/* Exponenciación modular */
/* Entrada: x base, y exponente, n modulo */
/* Salida : x elevado a y modulo n */
/* Notas : no se comprueban errores de desbordamiento, que se */
/* produciran con enteros "grandes". */
/* */
/* Jaime Suarez <mcripto@bigfoot.com> 2003 */
/* en http://www.matematicas.net */
/****************************************************************************/
unsigned long exp_mod(unsigned long x, unsigned long y, unsigned long n)
{
unsigned long s,t,u;
int i;
s=1; t=x; u=y;
while(u) {
if (u&1) s=(s*t)%n;
u>>=1;
t=(t*t)%n;
}
return s;
}