Как посчитать сумму 1^3 + 2^3 - 3^3 + 4^3 + 5^3 - 6^3 + 7^3 + 8^3 - ... + n^3?
Задача, составить программу, которая получает с клавиатуры одно двузначное натуральное чётное число n и выводит на экран значение следующей суммы:
1^3 + 2^3 - 3^3 + 4^3 + 5^3 - 6^3 + 7^3 + 8^3 - ... + n^3
Попытка решения:
n, res = int(input()), 0
for i in range(1, n + 1):
if i % 2 == 0: res += i**3
else: res -= i**3
print(res)
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
попробуйте так:
res = sum(i**3 * (-1)**int(i%3==0) for i in range(1, n+1))
или ваш (слегка исправленный) вариант:
res = 0
for i in range(1,n+1):
if i%3==0: res-=i**3
else: res+=i**3
print(res)
Минус должен стоять перед элементами кратными трем. В вашем решении вы ставите минус перед четными элементами.
Автор решения: OPTIMUS PRIME
→ Ссылка
Предлагаю использовать магию математику xD
1^3 + 2^3 - 3^3 + 4^3 + 5^3 - 6^3 + 7^3 + 8^3 - 9^3 + ... + n^3 =
// Дополнительно добавить и вычесть +3^3 - 3^3 + 6^3 - 6^3 + 9^3 - 9^3...
(1^3 + 2^3 + 3^3 + 4^3 + ... n^3) - 2 * (3^3 + 6^3 + 9^3 ...) = ...
Для первой части есть прикольная формула:
1^3 + 2^3 + 3^3 + ... + n^3 = (1 + 2 + 3 + ... + n)^2 = (n(n + 1)/2)^2
Осталось разобраться со второй:
* k — ближайшее снизу число к n, которое нацело делится на 3.
3^3 + 6^3 + 9^3 ... + k^3 =
/ \ / \ / \ / \
(3^3 * 1^3) + (3^3 * 2^3) + (3^3 * 3^3) ... + 3^3 * (k/3)^3 =
3^3 * (1^3 + 2^3 + 3^3 ... + (k/3)^3)
2 * (3^3 + 6^3 + ...k^3) = 2 * 27 * (1 + 2 + ... + k/3)^2
Python:
n = int(input())
div_3 = n // 3 # оно же, k/3
print( (n * (n + 1) / 2) ** 2 - 54 * (div_3 * (div_3 + 1) / 2) ** 2 )