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.
1₂ = 1₁₀
10₂ =2₁₀
11₂ = 3₁₀
100₂ = 4₁₀
101₂ = 5₁₀
110₂ = 6₁₀
111₂ = 7₁₀
1000₂ = 8₁₀
1001₂ = 9₁₀
1010₂ = 10₁₀
1011₂ = 11₁₀
1100₂ = 12₁₀
1101₂ = 13₁₀
1110₂ = 14₁₀
1111₂ = 15₁₀
это таблица для перевода координат точек в 10-ную систему
Объяснение:
1₂ = 1*2⁰ = 1₁₀
10₂ = 0*2⁰ + 1*2¹ = 2₁₀
11₂ = 1*2⁰ + 1*2¹ = 3₁₀
100₂ = 0*2⁰ + 0*2¹ + 1*2² = 4₁₀
101₂ = 1*2⁰ + 0*2¹ + 1*2² = 5₁₀
110₂ = 0*2⁰ + 1*2¹ + 1*2² = 6₁₀
111₂ = 1*2⁰ + 1*2¹ + 1*2² = 7₁₀
1000₂ = 0*2⁰ + 0*2¹ + 0*2² + 1*2³ = 8₁₀
1001₂ = 1*2⁰ + 0*2¹ + 0*2² + 1*2³ = 9₁₀
1010₂ = 0*2⁰ + 1*2¹ + 0*2² + 1*2³ = 10₁₀
1011₂ = 1*2⁰ + 1*2¹ + 0*2² + 1*2³ = 11₁₀
1100₂ = 0*2⁰ + 0*2¹ + 1*2² + 1*2³ = 12₁₀
1101₂ = 1*2⁰ + 0*2¹ + 1*2² + 1*2³ = 13₁₀
1110₂ = 0*2⁰ + 1*2¹ + 1*2² + 1*2³ = 14₁₀
1111₂ = 1*2⁰ + 1*2¹ + 1*2² + 1*2³ = 15₁₀
1₂ = 1₁₀
10₂ =2₁₀
11₂ = 3₁₀
100₂ = 4₁₀
101₂ = 5₁₀
110₂ = 6₁₀
111₂ = 7₁₀
1000₂ = 8₁₀
1001₂ = 9₁₀
1010₂ = 10₁₀
1011₂ = 11₁₀
1100₂ = 12₁₀
1101₂ = 13₁₀
1110₂ = 14₁₀
1111₂ = 15₁₀
это таблица для перевода координат точек в 10-ную систему
Объяснение:
1₂ = 1*2⁰ = 1₁₀
10₂ = 0*2⁰ + 1*2¹ = 2₁₀
11₂ = 1*2⁰ + 1*2¹ = 3₁₀
100₂ = 0*2⁰ + 0*2¹ + 1*2² = 4₁₀
101₂ = 1*2⁰ + 0*2¹ + 1*2² = 5₁₀
110₂ = 0*2⁰ + 1*2¹ + 1*2² = 6₁₀
111₂ = 1*2⁰ + 1*2¹ + 1*2² = 7₁₀
1000₂ = 0*2⁰ + 0*2¹ + 0*2² + 1*2³ = 8₁₀
1001₂ = 1*2⁰ + 0*2¹ + 0*2² + 1*2³ = 9₁₀
1010₂ = 0*2⁰ + 1*2¹ + 0*2² + 1*2³ = 10₁₀
1011₂ = 1*2⁰ + 1*2¹ + 0*2² + 1*2³ = 11₁₀
1100₂ = 0*2⁰ + 0*2¹ + 1*2² + 1*2³ = 12₁₀
1101₂ = 1*2⁰ + 0*2¹ + 1*2² + 1*2³ = 13₁₀
1110₂ = 0*2⁰ + 1*2¹ + 1*2² + 1*2³ = 14₁₀
1111₂ = 1*2⁰ + 1*2¹ + 1*2² + 1*2³ = 15₁₀
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)