Позволяет N
быть числом (10<=N<=10^5)
.
Я должен разбить его на 3 числа (x,y,z)
, чтобы он удовлетворял следующим условиям.
1. x<=y<=z
2. x^2+y^2=z^2-1;
3. x+y+z<=N
Я должен найти, сколько комбинаций я могу получить из данных чисел в методе.
Я попытался следующим образом, но это заняло так много времени для большего числа и в результате тайм-аут..
int N= Int32.Parse(Console.ReadLine());
List<String> res = new List<string>();
//x<=y<=z
int mxSqrt = N - 2;
int a = 0, b = 0;
for (int z = 1; z <= mxSqrt; z++)
{
a = z * z;
for (int y = 1; y <= z; y++)
{
b = y * y;
for (int x = 1; x <= y; x++)
{
int x1 = b + x * x;
int y1 = a - 1;
if (x1 == y1 && ((x + y + z) <= N))
{
res.Add(x + "," + y + "," + z);
}
}
}
}
Console.WriteLine(res.Count());
Мой вопрос:
Мое решение требует времени для большего числа (я думаю это для циклов), как я могу улучшить это?
Есть ли лучший подход к тому же?