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.

© Copyright 2022, Remington Furman, blog@remcycles.net