using System.Collections.Generic;
public static void Main()
long phi = (p - 1) * (q - 1);
Console.WriteLine($"ф(n): {phi}\n");
Dictionary<(long, long), int> distribution = new();
for (long e = 3; e < phi; e++)
if (GCD(e, phi, out d, out _) != 1) continue;
long quot = Math.DivRem(e, d, out long rem);
if (!distribution.ContainsKey((quot, rem)))
distribution[(quot, rem)] = 0;
distribution[(quot, rem)] += 1;
var sorted = from entry in distribution orderby entry.Value descending select entry;
foreach (var kvp in sorted)
Console.WriteLine((kvp.Key.Item1, kvp.Key.Item2, kvp.Value));
public static long GCD(long n, long m, out long x, out long y)
q = Math.DivRem(n, m, out r);