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

(C++, очень срочно) Последовательное произведение

В этой задаче вам требуется определить: сколько существует различных непрерывных подпоследовательностей ряда натуральных чисел, которые в произведении дают заданное число n.

Формат входных данных
Единственная строка входных данных содержит натуральное число n(1 ⩽ n ⩽ 109).

Формат выходных данных
Выведите одно натуральное число — ответ на задачу.

Система оценки и описание подзадач
Баллы за каждый тест начисляются независимо.

Пояснение к примеру
В примере нужно найти количество непрерывных подпоследовательностей ряда натуральных чисел, дающих в произведении число 120. Перечислим их:

1) 1⋅2⋅3⋅4⋅5=120

2) 2⋅3⋅4⋅5=120

3) 4⋅5⋅6=120

4) 120=120

Всего 4 подпоследовательности.

Ввод: 120
Вывод: 4

Ответы

Автор ответа: mister57loy88
1

Ответ:

Только питон, извини

n = int(input())

c = 1

ans = 0

for i in range(1, n+1):

~~~~for j in range(i, n+1):

~~~~~~~~c*=j

~~~~~~~~if c == n:

~~~~~~~~~~~~ans+=1

~~~~~~~~~~~~break

~~~~c = 1

print(ans)


Flapbooker: Всё равно спасибо!
kaakind: Код выше не очень эффективен. Проверять достаточно до корня, после чего добавить единицу к ответу (правда, в таком случае n = 1 нужно отдельно выводить). Также можно эффективнее устроить перебор, выкидывая все i, на которые вводимое число не делится. У меня получилось вот так:
kaakind: num = int(input())
ans = 0
i = 1
while num != 1 and i <= int(num ** (1/2)):
current = 1
while num % i != 0:
i += 1
j = i
while num % current == 0 and current < num:
current *= j
j += 1
if current == num:
ans += 1
i += 1
ans += 1
print(ans)
kaakind: num = int(input())
ans = 0
i = 1
while num != 1 and i <= int(num ** (1/2)):
~~~~current = 1
~~~~while num % i != 0:
~~~~~~~~i += 1
~~~~j = i
~~~~while num % current == 0 and current < num:
~~~~~~~~current *= j
~~~~~~~~j += 1
~~~~if current == num:
~~~~~~~~ans += 1
~~~~i += 1
ans += 1
print(ans)
Похожие вопросы
Предмет: Математика, автор: 006batir