Предмет: Информатика, автор: 12adelina

код на с++ и на питоне пожалуйста, очень на вас надеюсь
Делители факториала
По заданному натуральному числу N необходимо вычислить количество натуральных чисел, которые являются делителями N! (факториала числа N).

Например, при N=4, N!=4⋅3⋅2⋅1=24. Это число имеет следующие делители: 1,2,3,4,6,8,12,24. Таким образом, искомое количество составляет 8.

Напишите программу, которая по натуральному N находит количество делителей его факториала.

Формат входных данных

Единственная строка входного файла содержит одно целое число N(1≤N≤45).

Формат выходных данных

Единственная строка выходного файла должна содержать одно целое число — найденное количество делителей числа N!
Примеры
Ввод 1
4
Вывод
8

Ответы

Автор ответа: regressor04
0

from math import factorial

# Функция факторизации, то есть разложения на простые множители

def factor(n):

   res = []

   i = 2

   while i * i <= n: # Ищем только до корня из n

       if n % i == 0:

           res.append(i)

           n //= i

       else:

           i += 1

   if n > 1:

       res.append(n)

   return res

n = int(input())

if n == 1: # Факторизация единицы ничего не даст, обработаем её отдельно

   print(1)

else:

   primes = factor(factorial(n)) # Рассчитываем факториал и получаем все простые делители

   # Наш ответ будем умножать в процессе, поэтому 1

   # num отвечает за количество повторений актуального простого делителя

   # последний обработанный простой делитель, начинаем с первого элемента

   answer, num, actual, length = 1, 1, primes[0], len(primes)

   for i in range(1, length): # Начинаем с 1, тк 0 элемент мы уже обработали

       if primes[i] == actual: # Если такой уже был, то просто увеличиваем счетчик

           num += 1

       else: # Если это новый простой делитель

           answer *= num + 1 # домножаем ответ на инкрементированное кол-во одинаковых делителей

           num = 1 # Обработка происходит уже на новом элементе, учитываем его

           actual = primes[i] # Меняем текущий элемент

   answer *= num + 1 # Последняя обработка не попадет в цикл, домножим так

   print(answer)Ответ:

Объяснение:

Похожие вопросы