Python Напишите программу, которая определяет, сколько слагаемых должно быть в сумме 2+4+6+8+…, чтобы эта сумма оказалась больше некоторого данного натурального числа N на ПИТОНЕ
2 + 4 + 6 + ... + 2k - арифметическая прогрессия, значит мы можем найти сумму этого ряда по формуле суммы арифметической прогрессии, вынесем это в отдельную функцию :
Дальше будем перебирать последний элемент для ряда, просто идти в цикле долго и глупо, поэтому зная, что функция суммы ряда из положительных чисел монотонно возрастающая, то найдем подходящий последний элемент, а значит и кол-во слагаемых с бинпоиска за логарифм вместо линии :
У меня реализация попроще, чем в предыдущем ответе, но вроде бы тоже правильная :)
Мы видим, что к сумме постоянно прибавляется число, на 2 большее, чем предыдущее, начиная с двух. Это и есть переменная add: изначально она равна 2, то есть на первом проходе цикла к сумме прибавится 2. После этого, в этом же цикле значение переменной add станет равно 4 (7-я строка), поэтому на втором проходе к сумме прибавится 4, и так далее. В итоге получаем правильную сумму: 2 + 4 + 6 + ...
Переменная k - это как раз искомое количество слагаемых этой суммы. Каждый раз, когда к сумме прибавляется новое слагаемое, она увеличивается на 1.
2 + 4 + 6 + ... + 2k - арифметическая прогрессия, значит мы можем найти сумму этого ряда по формуле суммы арифметической прогрессии, вынесем это в отдельную функцию :
def sumN(first, last):
return (first + last) * ((last - first + 2) // 2) / 2
Дальше будем перебирать последний элемент для ряда, просто идти в цикле долго и глупо, поэтому зная, что функция суммы ряда из положительных чисел монотонно возрастающая, то найдем подходящий последний элемент, а значит и кол-во слагаемых с бинпоиска за логарифм вместо линии :
def sumN(first, last):
return (first + last) * ((last - first + 1) // 2) / 2
N = int(input())
l = 1
r = 100000
res = -1
while l <= r :
m = (l + r) // 2
F = 2
L = 2 * m
if sumN(F,L) > N :
res = m
r = m - 1
else :
l = m + 1
print(res)
полный код :
def sumN(first, last):
return (first + last) * ((last - first + 1) // 2) / 2
N = int(input())
l = 1
r = 100000
res = -1
while l <= r :
m = (l + r) // 2
F = 2
L = 2 * m
if sumN(F,L) > N :
res = m
r = m - 1
else :
l = m + 1
print(res)
N = int(input('Введите число N'))
sum = 0
add = 2
k = 0
while sum < =N:
sum += add
add += 2
k += 1
print(k)
Объяснение:
У меня реализация попроще, чем в предыдущем ответе, но вроде бы тоже правильная :)
Мы видим, что к сумме постоянно прибавляется число, на 2 большее, чем предыдущее, начиная с двух. Это и есть переменная add: изначально она равна 2, то есть на первом проходе цикла к сумме прибавится 2. После этого, в этом же цикле значение переменной add станет равно 4 (7-я строка), поэтому на втором проходе к сумме прибавится 4, и так далее. В итоге получаем правильную сумму: 2 + 4 + 6 + ...
Переменная k - это как раз искомое количество слагаемых этой суммы. Каждый раз, когда к сумме прибавляется новое слагаемое, она увеличивается на 1.