Problem 43
09 May 2003
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:
- d2d3d4=406 is divisible by 2
- d3d4d5=063 is divisible by 3
- d4d5d6=635 is divisible by 5
- d5d6d7=357 is divisible by 7
- d6d7d8=572 is divisible by 11
- d7d8d9=728 is divisible by 13
- d8d9d10=289 is divisible by 17
Find the sum of all 0 to 9 pandigital numbers with this property.
C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Numerics; namespace Euler { class Program { static string arrayToString<T>(T[] array) { return array.Select(x => Convert.ToString(x)).Aggregate(string.Concat); } static long sum = 0; static void permute(int[] n, int level = 0) { if (level > n.Length - 1) { //Console.Write(count + ": "); //foreach (var x in n) Console.Write(x); //Console.WriteLine(); //Console.ReadKey(); string strN = arrayToString(n); //Console.WriteLine(strN); //Console.ReadKey(); if (Convert.ToInt64(strN.Substring(7, 3)) % 17== 0 && Convert.ToInt64(strN.Substring(6, 3)) % 13== 0 && Convert.ToInt64(strN.Substring(5, 3)) % 11== 0 && Convert.ToInt64(strN.Substring(4, 3)) % 7 == 0 && Convert.ToInt64(strN.Substring(3, 3)) % 5== 0 && Convert.ToInt64(strN.Substring(2, 3)) % 3 == 0 && Convert.ToInt64(strN.Substring(1, 3)) % 2 == 0) { sum += Convert.ToInt64(strN); } return; } for (int i = 0; i <= 9; i++) { bool hasDuplicate = false; for (int priorLevel = 0; priorLevel < level; priorLevel++) { if (i == n[priorLevel]) { hasDuplicate = true; break; } } if (!hasDuplicate) { n[level] = i; permute(n, level + 1); } } } static void Main(string[] args) { permute(new int[10]); Console.WriteLine(sum); } } }
'Project Euler' 카테고리의 다른 글
Project Euler Problem 45 (0) | 2012.06.09 |
---|---|
Project Euler Problem 44 (0) | 2012.06.09 |
Project Euler Problem 42 (0) | 2012.06.09 |
Project Euler Problem 41 (0) | 2012.06.09 |
Project Euler Problem 40 (0) | 2012.06.09 |