помогите, пожалуйста, написать программу в Паскале
Приложения:
BobbyFresnel:
А значит, надо привлекать модулярную арифметику. Но не понимаю, зачем такие вузовские понятия пихать в школьные олимпиады.
А какое у Вас решение?
Допустим, для n =1234556789012345 и m = 987654321
https://olymp.hse.ru/mmo/tasks-it
И как Вы эту фразу понимаете? "Если же n < m то достаточно промоделировать процесс, беря остаток от деления на m при каждом умножении на следующее число."
Вот в примере n =3 для m=7 дает 6, для m=6 дает 0. И что?
Проблема не в программе, проблема в по-дурацки сформулированной фразе предлагаемого решения.
Смотрел в Интернет про вычисление факториала по модулю. Везде пишется, что при больших n и m нахождение результата за приемлемое время совершенно нетривиальная задача.
Ага... смысл понял. на каждом шаге делить на результат предудущего по модулю, просто чтобы число не было слишком большим.
Но на деле PascalABС.NET позволяет просто использовать целочисленную арифметику с произвольным число цифр. Но жо выяснить для 10^6, как быстрее.
Ответы
Ответ дал:
1
===== PascalABC.NET =====
begin
var a := ReadArrInteger(6);
for var i := 0 to 2 do
begin
var n := a[2 * i];
var m := a[2 * i + 1];
if m <= n then
Println(0)
else
begin
var p := 1;
for var j := 2 to n do
p := p * j mod m;
Println(p)
end
end
end.
Вас заинтересует
1 год назад
1 год назад
1 год назад
1 год назад
3 года назад
8 лет назад