Lets N
be a number (10<=N<=10^5)
.
I have to break it into 3 numbers (x,y,z)
such that it validates the following conditions.
1. x<=y<=z 2. x^2+y^2=z^2-1; 3. x+y+z<=N
I have to find how many combinations I can get from the given numbers in a method.
I have tried as follows but it's taking so much time for a higher number and resulting in a timeout..
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());
My question:
My solution is taking time for a bigger number (I think it’s the for loops), how can I improve it?
Is there any better approach for the same?
#c-sharp