6. 質因數

string s;
while ((s = Console.ReadLine()) != "")
{
    var data = s.Split(' ');
    int a = int.Parse(data[0]);
    int b = int.Parse(data[1]);
    int oa = a, ob = b;

    int n = 2;
    Dictionary<int, int> kv = new Dictionary<int, int>(); // n, times
    while (a > 1)
    {
        if (a % n == 0)
        {
            kv.TryAdd(n, 0);
            kv[n] = kv[n] + 1;
            a /= n;
        }
        else n++;
    }

    for (global::System.Int32 i = 0; i < kv.Count; i++)
    {
        Console.Write($"{kv.ElementAt(i).Key}{(kv.ElementAt(i).Value == 1 ? "" : $"^{kv.ElementAt(i).Value}")}");
        if (i != kv.Count - 1) Console.Write("*");
    }
    Console.Write(", ");

    n = 2;
    kv = new Dictionary<int, int>(); // n, times
    while (b > 1)
    {
        if (b % n == 0)
        {
            kv.TryAdd(n, 0);
            kv[n] = kv[n] + 1;
            b /= n;
        }
        else n++;
    }

    for (global::System.Int32 i = 0; i < kv.Count; i++)
    {
        Console.Write($"{kv.ElementAt(i).Key}{(kv.ElementAt(i).Value == 1 ? "" : $"^{kv.ElementAt(i).Value}")}");
        if (i != kv.Count - 1) Console.Write("*");
    }
    Console.Write(", ");

    int gcd = 1;
    for (int i = Math.Min(oa, ob); i > 0; i--)
    {
        if (oa % i == 0 && ob % i == 0)
        {
            gcd = i;
            break;
        }
    }

    Console.Write(gcd + ", ");

    int ogc = gcd;
    n = 2;
    int suc = 1;
    while (gcd > 1)
    {
        if (gcd % n == 0)
        {
            gcd /= n;
            suc++;
        }
        else n++;
    }
    Console.WriteLine(ogc == 1 || suc > 2 ? "N" : "Y");
}

Last updated