Дамы и Господа! Нужна Ваша помощь. Решил заняться олимпиадным программированием и вот пока встречаю камни предкновения. Решал задачу с Timus 1110 Степень http://acm.timus.ru/problem.aspx?space=1&num=1110 1110. Степень Ограничение времени: 0.5 секунды Ограничение памяти: 16 МБ Даны целые числа N, M и Y. Напишите программу, которая найдёт все целые числа X в диапазоне [0, M – 1], такие что XN mod M = Y. Исходные данные Ввод содержит единственную строку с числами N, M и Y (0 < N < 999, 1 < M < 999, 0 < Y < 999), записанными через пробел. Результат Выведите все числа X через пробел в одной строке. Числа должны идти в порядке возрастания. Если искомых чисел нет, выведите −1.
Вот собственно код
program Project2;
{$APPTYPE CONSOLE}
var
N,M,Y: Word;
i: Word;
found: Boolean;
function Power(i: Word; N: Word): Integer;
var res: Integer;
begin
if odd(N) then res:=i
else res := 1;
while N>1 do
begin
N:=N div 2;
i:=i*i;
if odd(N) then
res:=res*i;
end;
Power:=res;
end;
function Left(x: Integer; y, n: Integer): Integer;
begin
Left:=Power(x mod n, y) mod n;
end;
begin
ReadLn(N, M, Y);
found:=true;
for i := 0 to M --- 1 do
if Left(i, N, M) = Y then
begin
Write(i, ' ');
found:=false;
end;
if found then Write(-1);
end.
Валиться на 6 тесте. Предполагаю не укладывается по времени, но я уже не знаю как ее еще улучшить. Помогите кто чем сможет