100000! содержит "всего" 456574 цифр, так что по крайней мере имеет смысл попытаться начать решать задачу.
Вот наивный алгоритм, который вычисляет факториал по определению (n! = 1 * 2 * 3 * ... * n):
Код (Python 3):
prod = 1
for i in range(1, 100000 + 1):
prod *= i
Количество нулей в конце в числе prod можно найти, например, так (результат находится в переменной count):
Код (Python 3):
count = 0
while prod % 10 == 0:
count += 1
prod //= 10
Наконец, проверим, сколько времени считался результат. Импортируем из модуля time функцию perf_counter, запустим её в начале программы и в конце. Разность результатов - время работы программы в секундах.
Итого получаем такую программу:
Код (Python 3):
from time import perf_counter
start = perf_counter()
prod = 1
for i in range(1, 100000 + 1):
prod *= i
print(prod)
count = 0
while prod % 10 == 0:
count += 1
prod //= 10
print(count)
end = perf_counter()
print(end - start)
Вывод полностью приводить не буду, скажу только, что вычисление на моём компьютере заняло меньше 15 секунд.
Поделитесь своими знаниями, ответьте на вопрос:
Каждый из 10 населенных пунктов соединен автодорогами (без проезда через промежуточные пункты При этом автобусное сообщение существует только между следующими населенными пунктами: Нахабино и Аникеевка, Прудок и Ермолино и Любань, Бужарово и Марушкино, Нахабино и Любань, Аникеевка и Ермолино и Бужарово, Дарна и Кашино, Дарна и Кашино и Марушкино. 1. Постройте граф по этому описанию. 2. Сколько всего существует автодорог между населенными пунктами? 3. Можно ли с автобусного сообщения попасть из Нахабино в Прудок? 4. С каким наименьшим количеством пересадок можно доехать из Марушкино в Прудок? 5. Какой маршрут можно открыть, что бы автобусное сообщение существовало между всеми 10 населенными пунктами?
const
m = 10;
var
t: array[1..m] of integer;
i, n, nm, sm: integer;
begin
//Заполняем массив сл.числами и подсчитываем
//количество элементов и среднее арифметическое
//согласно условию задачи
for i := 1 to m do
begin
t[i] := random(-20, 20);write(t[i]:4);
if (i > 1) and (i <= m) then
if t[i] > t[i - 1] then n := n + 1
else if t[i] < t[i - 1] then begin
sm := sm + t[i];nm := nm + 1;
end;
end;
writeln;
writeln('число элементов больших предыдущего = ', n);
writeln('ср. арифметическое элементов меньших предыдущего = ', sm / nm);
end.
Тестовое решение:
6 13 19 8 -19 -11 -20 -15 -19 -13
число элементов, больших предыдущего = 5
среднее арифметическое элементов, меньших предыдущего = -12.5