Быстрое модульное экспонирование (думаю, так оно и называется) может работать.
Given a, b, c and a^b (mod c):
1. Write b as a sum of powers of 2. (If b=72, this is 2^6 + 2^3 )
2. Do:
(1) a^2 (mod c) = a*
(2) (a*)^2 (mod c) = a*
(3) (a*)^2 (mod c) = a*
...
(n) (a*)^2 (mod c) = a*
3. Using the a* from above, multiply the a* for the powers of 2 you identified. For example:
b = 72, use a* at 3 and a* at 6.
a*(3) x a*(6) (mod c)
4. Do the previous step one multiplication at a time and at the end, you'll have a^b % c.
Теперь, как вы собираетесь это делать с типами данных, я не знаю. Пока ваш тип данных может поддерживать c ^ 2, я думаю, вы будете в порядке.
Если используются строки, просто создайте строковые версии сложения, вычитания и умножения (не слишком сложно). Этот метод должен быть достаточно быстрым, делая это. (и вы можете начать шаг 1 с помощью мода c, чтобы a никогда не превышало c).
РЕДАКТИРОВАТЬ: О, смотри, вики-страницу на Модульное экспонирование .