Может быть как-нибудь воспользоваться

?
Ну вот, Вы сами все и написали, нужно было лишь побольше решимости.
Случай

обрабатываем отдельно (понятно как).
Далее, зависит от взаимной простоты

и

. В случае простого

при

сразу получаем, что

и

взаимно просты, и тогда нужно лишь вычислить

, что делается за

алгоритмом Евклида. Ну и так же при простом

функция Эйлера

, а значит степень

можно заменить на

. Ну и остается вспомнить как быстро возводить в степень по модулю (там

,

не помню).
При не простом

ситуация посложнее. Можно раскладывать

на простые множители (если

велико - это уже отдельная проблема), задача сведется к вычислению функции по модулю степени простого числа

. Остаток по модулю

будет собираться из остатков по модулю

с помощью китайской теоремы об остатках. Тут почти так же, за исключением того, что при

нет обратного элемента у

. Об это надо отдельно подумать. Если пока все устраивает - могу подумать
-- Сб окт 22, 2011 17:23:39 --Тут почти так же, за исключением того, что при

нет обратного элемента у

.
Тут, наверное, надо так: если

,

, то по биному Ньютона

- получаем сумму по степеням

. При

при

имеем

- полученную сумму (не путать с исходной!) можно обрубить на члене

и подсчитать. При малых

можно вычислить и в лоб.
Что-то как-то сложно вышло

Может товарищи суровые прогеры знают более легкий метод?
Это все
конечно для целых

.