Самый быстрый алгоритм для подведения итогов чисел до [закрытого] N

5
задан Wok 14 November 2012 в 16:40
поделиться

9 ответов

Если N положительно: int sum = N * (N + 1) / 2;

Если N отрицательно: int tempN = -N; int sum = 1 + tempN * (tempN + 1) / 2 * (-1); .

31
ответ дан 18 December 2019 в 05:11
поделиться

Попробуй ...

Где n - максимальное целое число, которое нужно суммировать.

Сумма равна (n * (N + 1)) / 2

0
ответ дан 18 December 2019 в 05:11
поделиться

int sum (int n) { return (n <0? N * (- n + 1) / 2 + 1: n * (n + 1) / 2); }

0
ответ дан 18 December 2019 в 05:11
поделиться

Чтобы завершить приведенные выше ответы, вот как вы доказываете формулу (пример для положительного целого числа, но принцип тот же для отрицаний или любого арифметического набора, что и Void указал).

Просто напишите набор два раза, как показано ниже, и добавьте числа:

  1+   2+   3+ ... n-2+ n-1+   n   = sum(1..n)     : n terms from 1 to n
+ n+ n-1+ n-2+ ...   3+   2+   1   = sum(n..1)     : the same n terms in reverse order
--------------------------------
n+1+ n+1+ n+1+ ... n+1+ n+1+ n+1   = 2 * sum(1..n) : n times n+1

n * (n+1) / 2 = sum(1..n)
6
ответ дан 18 December 2019 в 05:11
поделиться

вы слышали о последовательности и сериалах? "Быстрый" код, который вам нужен - это сумма арифметических рядов от 1 до N .. погуглите .. фактически откройте книгу по математике ..

0
ответ дан 18 December 2019 в 05:11
поделиться

Для борьбы с целочисленным переполнением я бы использовал следующую функцию:

sum = (N%2) ? ( ((N+1)/2)*N ) : ( (N/2)*(N+1) );
1
ответ дан 18 December 2019 в 05:11
поделиться

Формула, которую вы ищете, представляет собой более общую форму формулы, опубликованной в нескольких ответах на ваш вопрос, которая представляет собой арифметический ряд / прогрессию с разницей фактором 1 . Из Википедии это следующее:

alt text

Вышеупомянутая формула будет обрабатывать отрицательные числа до тех пор, пока m всегда меньше, чем n . Например, чтобы получить сумму от 1 до -2, установите m на -2 и n на 1, то есть сумму от -2 до 1. Это приведет к следующему:

(1 - -2 + 1) * (1 + -2) / 2 = 4 * -1 / 2 = -4 / 2 = -2.

, что является ожидаемым результатом.

18
ответ дан 18 December 2019 в 05:11
поделиться

если | n | достаточно мала, поисковая таблица будет самой быстрой.

или используя кеш, сначала выполните поиск в кеше, если не можете найти запись, затем вычислите сумму, используя n * (n + 1) / 2 (если n положительно), и запишите результат в кеш.

0
ответ дан 18 December 2019 в 05:11
поделиться
sum = N * (N + 1) / 2
24
ответ дан 18 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

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