A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 x 99
. Let's try to find the largest palindrome made from the product of two 3-digit numbers.
We will create an array to hold 3-digit numbers from 100 to 999 using our favorite NumPy function arange
.
Check the first and last element of the array with the assert_equal
function from the numpy.testing
package:
a = numpy.arange(100, 1000) numpy.testing.assert_equal(100, a[0]) numpy.testing.assert_equal(999, a[-1])
Now, we will create an array to hold all the possible products of the elements of the 3-digits array with itself. We can accomplish this with the outer
function. The resulting array needs to be flattened with ravel
, to be able to easily iterate over it. Call the sort
method on the array to make sure the array is properly sorted. After that, we can do some sanity checks:
numbers = numpy.outer(a, a) numbers = numpy.ravel(numbers) numbers.sort() numpy.testing.assert_equal(810000, len(numbers)) numpy.testing.assert_equal(10000, numbers[0]) numpy.testing.assert_equal(998001, numbers[-1])
The following is the complete program:
import numpy import numpy.testing #A palindromic number reads the same both ways. #The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 x 99. #Find the largest palindrome made from the product of two 3-digit numbers. #1. Create 3-digits numbers array a = numpy.arange(100, 1000) numpy.testing.assert_equal(100, a[0]) numpy.testing.assert_equal(999, a[-1]) #2. Create products array numbers = numpy.outer(a, a) numbers = numpy.ravel(numbers) numbers.sort() numpy.testing.assert_equal(810000, len(numbers)) numpy.testing.assert_equal(10000, numbers[0]) numpy.testing.assert_equal(998001, numbers[-1]) #3. Find largest palindromic number for i in xrange(-1, -1 * len(numbers), -1): s = str(numbers[i]) if s == s[::-1]: print s break
The code prints 906609
, which is a palindromic number.
We saw the
outer
function in action. This function returns the outer product of two arrays (http://en.wikipedia.org/wiki/Outer_product). The sort
function returns a sorted copy of an array.