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

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

Help.Помогите найти ошибку
Послано Vasurov 20 ноя 2015 01:33
var
   m, n, b, y, k, x: integer;

function St(x, n: integer): integer;
var
   i, f: integer;
begin
   f := 1;
   for i := 1 to n do
      f := f * x;
   St := f;
end;

begin
   readln(n, m, y);
   for x := 0 to m - 1 do
   begin
      b := st(x,n);
      if (b mod m) = y then
      begin
         write(x,' ');
         k := k + 1;
      end;
   end;
   if k = 0 then
      writeln(-1);
end.
Re: Help.Помогите найти ошибку
Послано Jane Soboleva (SumNU) 20 ноя 2015 09:32
N can be as large as 999, which will clearly give overflow when you try to calculate it.
Use f:=f * x mod m; instead of f:=f * x;
(also https://en.wikipedia.org/wiki/Modular_arithmetic)