public static bool SqrtRatioVar(int[] u, int[] v, int[] z)
{
int[] uv3 = Create();
int[] uv7 = Create();
Mul(u, v, uv3);
Sqr(v, uv7);
Mul(uv3, uv7, uv3);
Sqr(uv7, uv7);
Mul(uv7, uv3, uv7);
int[] t = Create();
int[] x = Create();
PowPm5d8(uv7, t, x);
Mul(x, uv3, x);
int[] vx2 = Create();
Sqr(x, vx2);
Mul(vx2, v, vx2);
Sub(vx2, u, t);
Normalize(t);
if (IsZeroVar(t))
{
Copy(x, 0, z, 0);
return true;
}
Add(vx2, u, t);
Normalize(t);
if (IsZeroVar(t))
{
Mul(x, RootNegOne, z);
return true;
}
return false;
}