/****************************************************************************/ /* 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://elparaiso.mat.uned.es */ /****************************************************************************/ 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; }