Necesito ser capaz de calcular (a^b)% c para valores muy grandes de ayb (que individualmente están presionando el límite y que causan errores de desbordamiento cuando intenta calcular un^segundo). Para números suficientemente pequeños, usar la identidad (a^b)% c = (a% c)^b% c funciona, pero si c es demasiado grande, esto realmente no ayuda. Escribí un bucle para hacer la operación mod manualmente, una a la vez un:Forma rápida de modificar manualmente un número
private static long no_Overflow_Mod(ulong num_base, ulong num_exponent, ulong mod)
{
long answer = 1;
for (int x = 0; x < num_exponent; x++)
{
answer = (answer * num_base) % mod;
}
return answer;
}
pero esto lleva un tiempo muy largo. ¿Hay alguna manera simple y rápida de hacer esta operación sin tener que tomar un poder de b y sin usar bucles que consumen mucho tiempo? Si todo lo demás falla, puedo crear una matriz de bool para representar un tipo de datos enorme y descubrir cómo hacerlo con operadores bit a bit, pero tiene que haber una forma mejor.
suena como un problema de Euler ... Si es así, se debe indicar claramente que en la pregunta en lugar de tratar de hacer trampa ... – Guffa
Conocer el rango de a, b y c podría ayudarnos. – Nosredna
Cheat? ......... –