Может быть как-нибудь воспользоваться
?
Ну вот, Вы сами все и написали, нужно было лишь побольше решимости.
Случай
обрабатываем отдельно (понятно как).
Далее, зависит от взаимной простоты
и
. В случае простого
при
сразу получаем, что
и
взаимно просты, и тогда нужно лишь вычислить
, что делается за
алгоритмом Евклида. Ну и так же при простом
функция Эйлера
, а значит степень
можно заменить на
. Ну и остается вспомнить как быстро возводить в степень по модулю (там
,
не помню).
При не простом
ситуация посложнее. Можно раскладывать
на простые множители (если
велико - это уже отдельная проблема), задача сведется к вычислению функции по модулю степени простого числа
. Остаток по модулю
будет собираться из остатков по модулю
с помощью китайской теоремы об остатках. Тут почти так же, за исключением того, что при
нет обратного элемента у
. Об это надо отдельно подумать. Если пока все устраивает - могу подумать
-- Сб окт 22, 2011 17:23:39 --Тут почти так же, за исключением того, что при
нет обратного элемента у
.
Тут, наверное, надо так: если
,
, то по биному Ньютона
- получаем сумму по степеням
. При
при
имеем
- полученную сумму (не путать с исходной!) можно обрубить на члене
и подсчитать. При малых
можно вычислить и в лоб.
Что-то как-то сложно вышло
Может товарищи суровые прогеры знают более легкий метод?
Это все
конечно для целых
.