Project Euler 26
素直に割っていき、余りがゼロになるかまたはサイクルするまで繰り返す。
using System; using System.Collections.Generic; using System.Linq; class PE026 { static List<int> CalcRecurringCycle(int d) { var divs = new List<int>(); var mods = new List<int>(); int n = 1; while (n != 0) { if (n < d) { divs.Add(0); mods.Add(n); n *= 10; } else { int div = n / d; int mod = n % d; int p = mods.IndexOf(mod); divs.Add(div); mods.Add(mod); if (p != -1) { return divs.Skip(p+1).ToList(); } n = mod * 10; } } return new List<int>(); // サイクルなし } static void Main() { var ans = Enumerable.Range(2, 1000-2) .Select(i => Tuple.Create(CalcRecurringCycle(i).Count, i)) .Max(); Console.WriteLine(ans.Item2); } }
プログラムを書いた後に、いつも 桃の天然水 さんの記事を参考にさせていただいています。 Project Euler 26 - 桃の天然水 を読みましたが、理解するのが難しいです。