Вы можете попробовать этот код на C ++. Я использовал его с 32 и 64-битными целыми числами. Я уверен, что получил это от SO.
template <typename T>
T modpow(T base, T exp, T modulus) {
base %= modulus;
T result = 1;
while (exp > 0) {
if (exp & 1) result = (result * base) % modulus;
base = (base * base) % modulus;
exp >>= 1;
}
return result;
}
Вы можете найти этот алгоритм и соответствующее обсуждение в литературе на с. 244 of
Schneier, Bruce (1996). Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition (2nd ed.). Wiley. ISBN 978-0-471-11709-4.