Introduction
I was listening to a podcast on Gauss where they talked about a story that, when as a youngster Gauss (and his classmates) were asked to calculate the sum of 1 to 100, Gauss came back with the following solution.
If we take the first and last number and add them, we get 101, if we take the 2nd and 2nd last number (2 + 99) we also get the result 101, hence if we do continue this process for half of the numbers we’ll get the result of the sum of 1 to 100
Please note, I’m not attributing the discovery of this formula to Gauss, so much as it just inspired me to look into this a little further.
So he we have [1, 100] and what we want to do is 1 + 2 + 3 + 4 … + 100, using Gauss’s observation, we can actually calculate this as (1 + n) * n / 2, i.e. the last number added to the first gives us 101 then multiply by 50 (i.e. 100/2) which gives us the result 5050.
The formula for this summation process is usually given as
n(n + 1)/2
which is obviously the same as we’ve listed, just rearranged.
Triangular numbers
What n(n + 1)/2 gives us, is a list of, what’s known as, triangular numbers.
If we think about having marbles and with those, start from 1 marble creating equilateral triangles, we will need three marbles to create the next equilateral triangle, then 6 marbles then 10 and so on, this pattern can be calculated by 1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4… and hence is the same as n(n + 1)/2.
Is x a triangular number
To determine if a number is triangular we need to rearrange our equation as follows
n(n + 1) / 2 = x
(n^2 + n) / 2 = x
n^2 + n = 2x
This can be rewritten as
n = (sqrt(8x + 1) – 1)/2
Now if n is a perfect square (i.e. no decimal points) then the number is triangular. We can use the following in code
var n = (Math.Sqrt(8 * x + 1) - 1) / 2; return Math.Floor(n) == n;
to test if the result is a perfect square.
A perfect square can be seen to be a squared number, i.e. 0^2, 1^2, 2^2 etc. are squared integers, hence if we square root a value we expect a non decimal number for it to be a perfect square.
References
http://mathforum.org/library/drmath/view/57162.html
http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/runsums/triNbProof.html