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 секунд.
5
Объяснение:
Маска в двоичном представлении - это 32 бита, первые несколько бит равны 1, остальные 0. Адрес сети из адреса узла получается побитовым И, то есть IP адрес переводится в двоичную форму, и вычисляется побитовое И с соответствующим битом маски.
Переводим IP узла и адрес сети в двоичную форму (можно сообразить, что достаточно перевести только второй справа байт)
159.152.66.19 = ... . ... . 01000010 . ...
159.152.64.0 = ... . ... . 01000000 . ...
Побитовое И работает так: 1 И 1 = 1, все остальные комбинации 0.
01 в начале должно сохраниться, поэтому второй страва байт маски начинается на 11.
10 в конце должно превратиться в 00, поэтому второй справа байт маски оканчивается на 00.
На оставшихся местах 0 превратился в 0, так что в маске может быть как 0, так и 1.
Вот все возможные варианты маски:
(16 единиц) 11000000 (8 нулей)
(16 единиц) 11100000 (8 нулей)
(16 единиц) 11110000 (8 нулей)
(16 единиц) 11111000 (8 нулей)
(16 единиц) 11111100 (8 нулей)
т.к. цветность 256 цветов, то цвет одной точки кодируется 1 байтом, следовательно весь рисунок будет 1600 байт, в битах это 12800 бит или ~1,6 кБайт