Другие языки программирования и технологии

Помогите написать программу Дано натуральное число n. Вычислить сумму всех k(k+1), k меняется от 1 до n.

Выше все решали задачу "в лоб". А если немного оптимизировать вычисления?

k * (k + 1) = k + k * k => sum[1;n](k * (k + 1)) = sum[1;n](k) + sum[1;n](k * k) = (1 + n) * n / 2 + sum[1;n](k * k)

program test;
var i, n, sum: integer;
begin
readln(n);
sum := n * (n + 1) div 2;
for i := 1 to n do inc(sum, sqr(i));
writeln(sum)
end.

А теперь то, что в школе обычно не проходят:
files.school-collection.edu.ru/dlrstore/28022add-4a3d-4497-b59a-e297e92fcdc6/00145620227953185.htm

sum[1;n](k * k) = (1 + 2 * n) * sum[1;n](k) / 3 = (1 + 2 * n) * (1 + n) * n / 6 =>
sum[1;n](k * (k + 1)) = (1 + n) * n / 2 + (1 + 2 * n) * (1 + n) * n / 6 = (4 + 2 * n) * (1 + n) * n / 6 =
= (2 + n) * (1 + n) * n / 3

program test;
var n: integer;
begin
readln(n);
writeln((2 + n) * (1 + n) * n div 3)
end.
Леонид Харитонов
Леонид Харитонов
60 330
Лучший ответ
$sum = 0;
for ($k = 1; $k <= $n; $k++) $sum += $k*($k+1);
INPUT N
S=0
FOR I=1 TO N
S=S+K*(K+1)
NEXT I
PRINT S
я могу написать, но впадлу
RB
Ramil Bulgar
4 135

Похожие вопросы