Witam,
znalazłem na internecie bardzo fajne rozwiązanie obliczania a^p(mod x) dla dużych liczb - http://stackoverflow.com/questions/4236673/sample-code-for-fast-primality-testing-in-c-sharp
Czy może któryś z forumowiczów wie jak poniższe rozwiązanie przekonwertować na rozwiązanie problemu odwrotności modulo dla dużych liczb (ap)-1(mod x) ?
ulong pow(ulong a, ulong p, ulong mod)
{
if (p == 0) return 1;
if (p % 2 == 0) return pow(mul(a, a, mod), p / 2, mod);
return mul(pow(a, p - 1, mod), a, mod);
}
ulong mul(ulong a, ulong b, ulong mod)
{
int i;
ulong now = 0;
for (i = 63; i >= 0; i--) if (((a >> i) & 1) == 1) break;
for (; i >= 0; i--)
{
now <<= 1;
while (now > mod) now -= mod;
if (((a >> i) & 1) == 1) now += b;
while (now > mod) now -= mod;
}
return now;
}