Project Euler 33

Problem 33

  • 問題文を読んでもどうもよく理解できずすっきりしない。
  • xy/yz = xz となる x, y, z を求めている。
using System;

class PE033 {
    static int Gcd(int m, int n) {
        int r = m % n;
        while (r != 0) {
            m = n;
            n = r;
            r = m % n;
        }
        return n;
    }
    
    static void Main() {
        /*
          xy / yz = x/z
          (10x + y) / (10y + z) = x / z
          (10xz + yz) / (10y + z) = x
          10xz + yz = 10xy + xz
          10xy - yz - 9xz = 0

          */

        // xy / yz = x/z なので x, y, z は 0 にはならない。

        int nume = 1;
        int deno = 1;
        for (int x = 1; x < 10; x++) {
            for (int y = 1; y < 10; y++) {
                for (int z = 1; z < 10; z++) {
                    if (x == y && y == z) continue;

                    int a = 10 * x * y;
                    int b = y * z;
                    int c = 9 * x * z;
                    if (a - b - c == 0) {
                        Console.WriteLine("{0}{1}/{1}{2}", x, y, z);
                        nume *= x;
                        deno *= z;
                    }
                }
            }
        }

        Console.WriteLine(deno / Gcd(nume, deno));
    }
}