2012/04/01(日)C# で 桁ごとに進数が違うインクリメントする機械
C# で 桁ごとに進数が違うインクリメントする機械
たとえば、素因数分解したときに 2^0 * 3^1 * 5^4 * 7^2 とかってなったときに、全部の約数を列挙したい時用。
public class Algorithm { public static bool Increment(int[] value, int[] limit) { if (value.Length != limit.Length) throw new ArgumentException(); for (int i = value.Length - 1; i >= 0; i--) { value[i]++; if (value[i] != limit[i]) return true; value[i] = 0; } return false; } } public class Program { static void Main() { int[] array = { 0, 0, 0, 0 }, limit = { 1, 2, 5, 3 }; do { Console.WriteLine(string.Join(", ", Array.ConvertAll<int, string>(array, i => i.ToString()))); } while (Algorithm.Increment(array, limit)); } }