Расчет обратного мода, где мод не прост

Я хочу рассчитать стоимость

F(N) = (F(N-1) * [((N-R+1)^(N-R+1))/(R^R)]) mod M для заданных значений N,R и M,

Здесь A^B показывает мощность B, а НЕ битовую операцию

Здесь M не обязательно должно быть простым. Как подойти к этому вопросу? Пожалуйста, помогите, потому что, если бы M было простым, что не было бы так трудно найти обратное к R ^ R mod M.

Но так как M может быть любым значением в диапазоне от 1 до 10^9. Я не могу решить эту проблему.

N может составлять от 1 до 10^5, а R меньше или равно N.

1 ответ

Предполагая, что вы как-то знаете, что результатом деления является целое число:

Поскольку N и R малы, вы можете сделать это, вычислив простую факторизацию N-R+1 и R.

Если мы знаем, что R=p^a...q^b затем R^R = p^(Ra)...q^(Rb),

Точно так же вы можете отработать силу каждого простого в (N-R+1)^(N-R+1),

Вычесть силы простых чисел в R^R от сил простых чисел в (N-R+1)^(N-R+1) дает вам силы каждого простого в результате.

Затем вы можете использовать стандартную подпрограмму возведения в степень для вычисления результата по модулю M без инверсий.

Другие вопросы по тегам