No intente calcular x^y directamente para valores enormes de y, como ya se ha señalado, esto es bastante difícil de hacer (requiere mucho espacio y potencia de procesamiento). Debe analizar los algoritmos que resuelven el problema por usted con menos operaciones de multiplicación. Eche un vistazo a: http://en.wikipedia.org/wiki/Exponentiation_by_squaring para empezar.
La exponenciación modular también se comprende bastante bien: http://en.wikipedia.org/wiki/Modular_exponentiation.
Deberá utilizar una biblioteca de Python para números grandes, como http://gmpy.sourceforge.net/.
Si es de alguna ayuda, hice la exponenciación modular en C usando mpir. Adjuntaré ese código, necesitarás convertirlo a python, por supuesto.
int power_modn(mpz_t c, mpz_t b, mpz_t e, mpz_t n)
{
mpz_t result;
mpz_t one;
mpz_t r;
mpz_t modulus; mpz_t exponent; mpz_t base;
mpz_init(modulus); mpz_init(exponent); mpz_init(base);
mpz_init(result); mpz_init(one); mpz_init(r);
mpz_set_ui(result, 1);
mpz_set_ui(one, 1);
mpz_set(base, b);
mpz_set(exponent, e);
mpz_set(modulus, n);
while (mpz_cmp_ui(exponent, 0) > 0)
{
if (mpz_mod_ui(r, exponent, 2) == 1)
{
mpz_mul(result, result, base);
mpz_mod(result, result, modulus);
};
mpz_mul(base, base, base);
mpz_mod(base, base, modulus);
mpz_fdiv_q_ui(exponent, exponent, 2);
}
mpz_set(c, result);
return 0;
}
¿Necesita tomar módulo después? – kennytm
Cryptography _is_ complex y realmente no hay motivo para gritar. Intenta buscar en Google "Numpy". Y si es importante, no hagas la criptografía tú mismo. – stefanw