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

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

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

 и 

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

 при 

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

 и 

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

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

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

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

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

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

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

, 

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

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

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

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

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

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

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

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

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

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

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

, 

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

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

. При 

 при 

 имеем 

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

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

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

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

.