Suppose you’re given a number and you’d like to tell whether its a square, or at least you’d like to be able to determine quickly if it’s *not* a square. This post began as a thread I wrote on Twitter.

For starters, the last digit of a square in base 10 must be 0, 1, 4, 5, 6, or 9. If a number ends in 3, for example, it’s not a square.

Now suppose the last two digits of a square are *yz*. What does *z* tell us about *y*?

- If
*z*= 1, 4, or 9, then*y*is even. - If
*z*= 6, then*y*is odd. - If
*z*= 0, then*y*= 0. - If
*z*= 5, then*y*= 2.

Now suppose the last three digits are *xyz*. What does *z* tell us about *x*? Nothing, for most values of *z*. If *z* is 1, 4, 6, or 9 then *x* could be any digit.

If *z* = 5, then *x* = 0, 2, or 6.

If *z* = 0, then our number is a multiple of 100, and dividing by 100 puts us back where we started: *z* is the last digit of a square, and so it must be 0, 1, 4, 5, 6, or 9.

## Hexadecimal

Now let’s switch gears and work in base 16. Something interesting happens right off the bat.

If *n* is a square, then the last hexadecimal digit of *n* is a square. That is, the last digit can only be 0, 1, 4, or 9.

Following the pattern above, if the last two hexadecimal digits of a square are *yz*, what does *z* tell us about *y*?

- If
*z*= 0, then*y*= 0, 1, 4, or 9. - If
*z*= 4, then*y*is even. - If
*z*= 1 or 9, then*y*could be anything.

## Duodecimal

Finally, let’s look at base 12.

As with base 16, if *n* is a square, then the last duodecimal digit of *n* is a square, i.e. it can only be 0, 1, 4, or 9.

If the last two duodecimal digits of a square are *yz*, what does *z* tell us about *y*?

- If
*z*= 0, then*y*= 0 or 3. - If
*z*= 1, then*y*is even. - If
*z*= 4, then*y*= 0, 1, 4, 5, 8, or 9. - If
*z*= 9, then*y*= 0 or 6.