Быстрое возведение в степень по модулю - C#
Формулировка задачи:
Столкнулся с проблемой, из-за которой не могу реализовать шифр.
Это метод быстрого возведения в степень по модулю , он работает правильно на положительных числах.
И суть в том , что в онлайн калькуляторе -137 mod 22 = 17. (Я не понимаю как получается это число), а у меня берется не как -137, а как обычные 137 mod 22 и получается 5;
Уже час сижу не могу понять. Заранее спасбио.
public Int64 FastPowFunc(Int64 Number, Int64 Pow, Int64 Mod)
{
Int64 Result = 1;
Int64 Bit = Number % Mod;
while (Pow > 0)
{
if ((Pow & 1) == 1)
{
Result *= Bit;
Result %= Mod;
}
Bit *= Bit;
Bit %= Mod;
Pow >>= 1;
}
return Result;
}Решение задачи: «Быстрое возведение в степень по модулю»
textual
Листинг программы
BigInteger.ModPow(-137, 1, 22)