Consider this problem: An absent-minded American mathematician has difficulty remembering his seven-digit phone number until he notices that, when he reverses the digits, he gets another seven-digit phone number that is a factor of his own phone number. After this point, he never has trouble with his number again. What is his phone number? (This is an adaptation of a problem from Aaron J. Friedland, Puzzles in Math and Logic [Dover Press].)
Solution
This is a job for brute force. We can make certain assumptions about the characteristics of the number (it’s probably a multiple of 2 or 3, for instance), but since we have computers readily available, I like to get some data first and then look for patterns.
Let’s look at the limitations. We rule out the trivial palindromic numbers (555-0555) as well as numbers whose reversals have leading zeroes (383-0000 and 980-1000). We’re to look for seven-digit numbers that have different seven-digit reversals which are factors. There are in fact only two of these: 8799912 and 9899901: [frac{8,799,912}{4} = 2,199,978\ frac{9,899,901}{9} = 1,099,989]
Only one of these factors can be a U.S. phone number, since three-digit exchanges can’t start with 1 (I understand this is a carry-over from the analog days, when a 1 at the beginning of a phone number triggered a long-distance call). Hence, the professor’s phone number is 879-9912.
Notice both of the numbers have three 9s in the middle. That’s actually relevant. This is where it gets cool.
What about other lengths?
So, what about other lengths? In order to crunch through this problem, I had written a quick Excel VBA subroutine. Inelegant and slow, but hey, it did its job. I gave it some minor tweaks to find all the non-palindromic numbers with a length from two to nine digits that have a reversal of the same number of digits. I stopped at nine for pragmatic reasons: Excel VBA’s long data type can’t handle all ten-digit numbers (its max is 2,147,483,647). As it turns out, though, Excel took about ten minutes on the nine digit numbers anyway, so it’s just as well I couldn’t keep going. Besides, a pattern had emerged at that point.
Here’s my subroutine, for the curious:
Sub FlipItGood() Dim StringLength As Integer, FactorToCheck As Long, ValueToCheck As Long, FactorTest As Double Dim ValueHoppers() As Integer, NumberPlace As Integer For StringLength = 2 To 9 ReDim ValueHoppers(StringLength) As Integer For FactorToCheck = 10 ^ (StringLength - 1) To 5 * 10 ^ (StringLength - 1) For NumberPlace = 1 To StringLength ValueHoppers(NumberPlace) = Int(FactorToCheck / 10 ^ (NumberPlace - 1)) Mod 10 Next NumberPlace ValueToCheck = 0 For NumberPlace = 1 To StringLength ValueToCheck = ValueToCheck + ValueHoppers(StringLength - NumberPlace + 1) * 10 ^ (NumberPlace - 1) Next NumberPlace FactorTest = ValueToCheck / FactorToCheck If FactorTest = Int(FactorTest) And FactorTest > 1 Then Debug.Print FactorToCheck, ValueToCheck, FactorTest End If Next FactorToCheck Next StringLength End Sub
And here is its output:
1089 9801 9 2178 8712 4 10989 98901 9 21978 87912 4 109989 989901 9 219978 879912 4 1099989 9899901 9 2199978 8799912 4 10891089 98019801 9 10999989 98999901 9 21782178 87128712 4 21999978 87999912 4 108901089 980109801 9 109999989 989999901 9 217802178 871208712 4 219999978 879999912 4
The first thing I noticed is that there are no two or three digit numbers that satisfy the constraints: The output starts at 4.
The second thing I noticed is that, for four to seven digits, there are two solutions, one a multiple of 4 and the other a multiple of 9. Notice that 4 and 9 are square numbers, the only one-digit squares.
The most intriguing thing that I noticed is that there’s a repeated pattern. Every solution has 87*12 or 98*01. Insert any number of 9s in place of the asterisk and you’ll get a number that satisfies the constraints. Starting with eight digits, we get two new values: 8712~8712 and 9801~9801. In this pattern, replace the tilde with any number of 0s.
At ten digits, by the way, we get two more new values: 8791287912 and 9890198901. We can generalize this with the eight-digit numbers to 87*12~87*12 and 98*01~98*01. Starting with twelve digits, we get some more new values: 871287128712, 879912879912, 980198019801, and 989901989901. I haven’t done the analysis to prove that this is an exhaustive list, but these numbers do satisfy the constraints.
Generalizing: Let’s Go All the Way
In fact, I’m willing to generalize that any number which follows the established pattern satisfies the constraints:
- Start with 8712 or 9801.
- Insert some arbitrary number of 9s in the middle.
- Duplicate at will.
- Insert some arbitrary number of 0s between the clones (making sure it’s the same number between each clone).
So let’s try it:
- 8712
- 8799912
- 8799912879991287999128799912
- 8799912000879991200087999120008799912
WolframAlpha confirms that our algorithm works.