ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1110. Степень

a idea
Послано HaiyangZheng 8 окт 2012 12:13
since X,M,Y in [0,1000]... power(X,N) is very large, we can't to calculate!

f(N) = X^N mod M = Y

then, X^N=k*M+Y

f(N+1) = X^(N+1) mod M
           = (X^N*X) mod M
           =(k*M*X+Y*X) mod M
           =Y*X mod M
           =f(N)*X mod M

example for X,M,Y is 2,6,4.
f(0)=2^0 mod 6    = 1
f(1)=f(0)*2 mod 6 = 2
f(2)=f(1)*2 mod 6 = 4 (ok)
f(3)=f(2)*2 mod 6 = 2
f(4)=f(3)*2 mod 6 = 4 (ok)
f(5)=f(4)*2 mod 6 = 2
f(6)=f(4)*2 mod 6 = 4 (ok)

thanks.
Re: a idea
Послано iLko 3 дек 2012 02:00
an idea !
Re: a idea
Послано aybek [UrTICCS] 13 янв 2014 21:50
thanks for idea!
But there is a mistake. Input format is N, M, Y.
It seems that it is DP problem.
So, you must define recursive function
f(x, n, m) = {
    1%m                 | if n is 0
    f(x, n-1, m)*x % m  | else
}
And call it
for every x from 0 to m-1.
Algorithm complexity is O(n^2)
So, at worst case there will be at about 1 000 000 iterations.
But it works. Thanks for idea! Good luck ;)