
Код на с++ и на питоне пожалуйста, очень на вас надеюсь Делители факториала По заданному
натуральному числу 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

Ответы на вопрос

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)Ответ:
Объяснение:



Приведенные ниже коды на C++ и Python решают задачу по вычислению количества делителей факториала числа N.
C++:
cpp#include <iostream>
int main() {
int N;
std::cin >> N;
int factorial = 1;
for (int i = 2; i <= N; ++i) {
factorial *= i;
}
int divisors = 0;
for (int i = 1; i <= factorial; ++i) {
if (factorial % i == 0) {
divisors++;
}
}
std::cout << divisors << std::endl;
return 0;
}
Python:
pythonN = int(input())
factorial = 1
for i in range(2, N + 1):
factorial *= i
divisors = 0
for i in range(1, factorial + 1):
if factorial % i == 0:
divisors += 1
print(divisors)
Оба этих кода сначала вычисляют факториал числа N, а затем перебирают числа от 1 до факториала и подсчитывают количество делителей, проверяя, делится ли факториал на каждое число без остатка. Результат выводится на экран.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili