private static void GetApproximateFraction(decimal number, int max, out int numerator, out int denominator)
{
int a = 0, b = 0;
decimal min = decimal.MaxValue;
for (int i = 0; i < max; i++)
{
if (i % 1000 == 0)
{
Console.Title = string.Format("{0}", i);
}
for (int j = 0; j <= i; j++)
{
a = j + 1;
b = i - j + 1;
if (GCD(a, b) == 1)
{
decimal t = (NumberLength(a) + NumberLength(b)) * Math.Abs((decimal)a / b - number);
if (t < min)
{
min = t;
Console.WriteLine("{0} / {1}", a, b);
}
}
}
}
numerator = a;
denominator = b;
}