PYTHON Подсчитайте количество натуральных делителей числа x (включая 1 и само число; x≤2∗109).

Входные данные

Вводится натуральное число x.

Выходные данные

Выведите единственное число - количество делителей числа x.
Примеры
Входные данные

32

Выходные данные

6

Я написал вот такой код, но написано, что превышено максимальное время работы программы:
x=int(input())
a=0
for b in range(1, x+1):
if x%b==0:
a=a+1
print(a)
Что я делаю не так?

Ivanych086 Ivanych086    1   18.02.2021 11:48    179

Ответы
cherbycorTaiga cherbycorTaiga  18.02.2021 11:50

Всё норм чел, у тебя все норм

ПОКАЗАТЬ ОТВЕТЫ
annaleha2009 annaleha2009  23.01.2024 15:13
Код, который ты написал, подсчитывает количество делителей числа x, но это решение не эффективно для больших значений x (x≤2∗109).

Превышение максимального времени работы программы может быть связано с тем, что твой код перебирает все числа от 1 до x в поиске делителей. Это очень медленно для больших чисел.

Есть более оптимальный подход для подсчета количества делителей числа x. Давай изучим его.

Факторизация - процесс разложения числа на простые множители. Воспользуемся этим подходом для решения задачи.

1. Инициализируй переменную count в 1. В ней будем подсчитывать количество делителей.
2. Исследуй числа от 2 до √x. Если число i делит x, то добавим к переменной count 2: i и x/i, так как они являются парными делителями. Обрати внимание, что мы доходили только до √x, так как все числа, большие этой границы, уже содержатся в числах до √x.
3. Если x является полным квадратом (т.е. √x является натуральным числом), добавь 1 к переменной count.
4. Выведи значение переменной count.

С точки зрения времени выполнения, этот алгоритм более эффективен, так как перебирает всего √x чисел для поиска делителей.

Пример кода, решающего эту задачу:

import math

x = int(input())
count = 0

for i in range(2, int(math.sqrt(x)) + 1):
if x % i == 0:
count += 2

if math.sqrt(x) == int(math.sqrt(x)):
count += 1

count += 2 # учитываем единицу и само число x как делители

print(count)

Теперь твоя программа должна работать корректно и подсчитывать количество натуральных делителей числа x.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика