# Multiple permutations

Published on 2011-08-09Woohoo! I've gotten through all Euler problems solved by more than 20,000 people — not an official milestone, but one that feels important nonetheless. The last of these, the tersely-worded problem 52, concerned multiples/permutations:

It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.

Find the smallest positive integer,

x, such that 2_x_, 3_x_, 4_x_, 5_x_, and 6_x_, contain the same digits.

To me, the phrase "find the smallest positive integer that ____" cries out for a brute force solution. There didn't seem to be anyway to preëmptively exclude certain values from being tested to see if they fit the problem requirements, so I focused on optimizing my testing algorithm. I borrowed a few lines of code from my solutions to problems 32 and 38 that check to see if one number is a permutation of another. If you take a number, convert it to a string, convert that string to a character array, and then sort that array, you will end up with the same array as you would performing the same sequence of operations on a permutation of the original number. Comparing the sorted character arrays derived from two numbers will tell you if they are permutations of each other.

Rather than checking each value `x`

against 2`x`

, 3`x`

, 4`x`

, 5`x`

, and 6`x`

, I checked it first against 2`x`

, then against 3`x`

, then against 4`x`

, and so on, moving to the next value `x`

when `nx`

didn't yield a permutation of `x`

.

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Problem052 { class Program { static void Main(string[] args) { int permutableMultiples = 0; bool multipleFound = false; for (int i = 1; !multipleFound; i++) { string baseMultiple = i.ToString(); char[] baseChars = baseMultiple.ToArray(); Array.Sort(baseChars); for (int j = 2; j < 7; j++) { char[] baseMultiplied = (i * j).ToString().ToArray(); Array.Sort(baseMultiplied); if (!baseChars.SequenceEqual(baseMultiplied)) break; if (j == 6) { permutableMultiples = i; multipleFound = true; break; } } } Console.WriteLine(permutableMultiples); } } }