В ходе изучения присланных ЦОД данных была замечена интересная закономерность. Так были получены следующие данные:
9 + 10 + 11 + 12 = 13 + 14 + 15 (p = 4, q = 3)
4 + 5 + 6 + 7 + 8 = 9 + 10 + 11 (p = 5, q = 3)
Вы сделали вывод, что сумма p последовательных положительных целых чисел иногда равна сумме следующих q последовательных положительных чисел. Вас как исследователя заинтересовала такая закономерность и Вы решили найти для заданного q, сколько существует подходящих p.
Формат ввода
Во входном файле записано одно целое число q (1 ⩽ q ⩽ 10^14).
Формат вывода
Выведите одно число — количество подходящих значений p.
Ввод 5 вывод 3
Ввод 1 вывод 1
Решить на любом языке программирования
Answers & Comments
Ответ:
Объяснение:
Чтобы решить эту задачу, вам нужно найти все значения p, которые удовлетворяют условию:
(q + 1) * q / 2 = p * (p + 1) / 2
Это уравнение можно переписать в следующем виде:
p^2 + p - 2 * (q + 1) * q = 0
Теперь вы можете использовать формулу для решения квадратного уравнения, чтобы найти значения p:
p1, p2 = (-b + sqrt(b^2 - 4ac)) / 2a, (-b - sqrt(b^2 - 4ac)) / 2a
Где:
a = 1, b = 1, c = -2 * (q + 1) * q
Чтобы посчитать количество подходящих p, вы можете взять ближайшее целое значение к p1 и p2, и увеличить результат на 1, если они различны.
Например, для q = 5, p1 = 2.6, p2 = -0.6, ближайшее целое значение к p1 равно 3, а ближайшее целое значение к p2 равно 0. Таким образом, количество подходящих p равно 3 - 0 + 1 = 4.
Вот пример кода на Python, который решает эту задачу:
import math
def solve(q):
a = 1
b = 1
c = -2 * (q + 1) * q
p1 = (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)
p2 = (-b - math.sqrt(b**2 - 4 * a * c)) / (2 * a)
p1_int = int(round(p1))
p2_int = int(round(p2))
if p1_int == p2_int:
return 1
else:
return abs(p1_int - p2_int) + 1
q = 5
print(solve(q)) # Output: 3
q = 1
print(solve(q)) # Output: 1