# Generating Squares and Cubes with Only Addition

I thought of this trick while falling asleep one night a few years ago. I'm sure I'm not the first, but I thought it would be fun to share anyway.

#include <stdio.h> /* Silly math trick: Generating square numbers with only addition. At each step, add n, then n+1. Example: from 4*4 to 5*5 ssss n ssss n ssss n ssss n nnnn 1 */ int main(void) { int n = 1; int square = 1; while (square <= 256) { printf("%d * %d = %d\n", n, n, square); square += n++; square += n; } }

In the Unix `dc`

calculator language:

#!/usr/bin/dc 1 d sn ss [ls p ln + ln 1 + sn ln + d ss 256 !<m] d sm x

It also works for cubes:

#include <stdio.h> /* Generating square and cube numbers with only addition. For squares, at each step, add n, then n+1. For cubes, add a square onto three sides that share a corner, fill in the resulting gaps by adding three n's, and one more for the corner. */ int main(void) { int n = 1; int square = 1; int cube = 1; while (cube < 2000) { printf("%d * %d = %d\n", n, n, square); printf("%d * %d * %d = %d\n\n", n, n, n, cube); cube += square+square+square + n+n+n + 1; square += n + n + 1; n++; } }

Example output from the cubes:

1 * 1 = 1 1 * 1 * 1 = 1 2 * 2 = 4 2 * 2 * 2 = 8 3 * 3 = 9 3 * 3 * 3 = 27 4 * 4 = 16 4 * 4 * 4 = 64 5 * 5 = 25 5 * 5 * 5 = 125 6 * 6 = 36 6 * 6 * 6 = 216 7 * 7 = 49 7 * 7 * 7 = 343 8 * 8 = 64 8 * 8 * 8 = 512 9 * 9 = 81 9 * 9 * 9 = 729 10 * 10 = 100 10 * 10 * 10 = 1000 11 * 11 = 121 11 * 11 * 11 = 1331 12 * 12 = 144 12 * 12 * 12 = 1728

It doesn't generalize any further, because nobody can think in four dimensions. I'm kidding of course, but I haven't gone to the fourth power yet.