e-olymp 7095. Факторіали

Задача

Президент Першого національного Банку майор Томаса Б. Кiнгмена кожну ніч перекладає вміст сейфів, у яких клієнти банку зберігають свої коштовності. Грабіжникам це також відомо, і тому вони орендували один із сейфів у цьому банку й чекають, поки президент перекладе в їхній сейф щось цінне. Таким чином до їхніх рук потрапила скринька з коштовностями самого майора! Тепер у грабіжників є всього лиш кілька годин для того, щоб відкрити кодовий замок з трьох цифр, забрати цінності й повернути скриньку назад, щоб ніхто навіть не дізнався, що пограбування взагалі відбулося.

Знаючи пристасть майора до великих чисел, грабіжники переконані, що кодом є три послідовні цифри числа $N!$, що записують безпосередньо перед нулями наприкінці запису числа $N!$. Наприклад:

  • при $N$ = $7$ кодом буде $504$, бо $7!$ = $5040$;
  • при $N$ = $17$ кодом буде $096$, бо $17!$ = $355687428096000$.

За даним натуральним числом $N$ знайти три послідовні цифри числа $N!$, що записують безпосередньо перед нулями наприкінці запису числа $N!$.

Вхідні дані

Вхідний файл містить єдине ціле число $N$. $(7 \leqslant N \leqslant 1000000000)$.

Вихідні дані

Вихідний файл має містити рівно три цифри — шуканий код.

Тесты

Входные данные Выходные данные
1 7 504
2 17 096
3 50 512
4 1000000000 144

Код

Решение

Поскольку процесс расчёта факториала больших чисел занимает много времени, его можно ускорить использованием массива факториалов некоторых чисел. Полное значение факториала не нужно, поэтому массив содержит последние $8$ ненулевых цифр значений факториалов чисел, кратных $10000000$, которые можно получить с помощью следующего кода:

Если на входе — число $N$, меньшее $10000000$, его факториал рассчитывается обычным циклом, попутно отбрасывая ненужные цифры высших разрядов. В конце выводятся искомые последние три цифры факториала числа $N$. Если на входе — число $N$, большее $10000000$, выбирается соответствующее значение из массива по индексу $N/10000000$, и далее с помощью цикла считается произведение оставшихся чисел из $N!$. С уменьшением кратности чисел, факториалы которых содержатся в массиве, увеличивается скорость выполнения программы.

Ссылки

Related Images:

4 thoughts on “e-olymp 7095. Факторіали

  1. — Хорошее решение. Не был уверен, что Вы справитесь. Но если осилили, буду давать задачи сложнее. Молодец.
    — Как вы получили числа из массива? Была какая-то вспомогательная программа?
    — Почему у Вас на аватарке обезьянка?
    — После «Наприклад:» должен идти маркированный список (UL). Для разметки элементов списка есть кнопки в редакторе, но проще написать самому пару тегов.
    — Уберите пустые строки.
    — Добавьте тесты для краев допустимого диапазона входных значений.

    • Была вспомогательная программа. Замечания исправила.

    • — Да, хорошо, что использовали вспомогательную программу. Это частая практика — предварительно что-то вычислить. Только нужно это написать и привести код.
      — Пожалуйста, уберите кириллицу из адреса работы (постоянная ссылка).

    • Добавила этот код в описание решения. Ссылку изменила.

Добавить комментарий