public static int[] CalculateSum(int[] P, int a, int p) { int lambda = CalculateLambda(P, a, p); int x = GCD.Mod(lambda * lambda - P[0] - P[0], p); int y = GCD.Mod(lambda * (P[0] - x) - P[1], p); return(new int[] { x, y }); }
private static int CalculateLambda(int[] P, int[] Q, int p) { return(GCD.Mod(GCD.Mod(Q[1] - P[1], p) * GCD.Mod(GCD.ModInverse(Q[0] + GCD.Mod(-P[0], p), p), p), p)); }
private static int CalculateLambda(int[] P, int a, int p) { return(GCD.Mod(GCD.Mod(3 * (P[0] * P[0]) + a, p) * GCD.ModInverse(2 * P[1], p), p)); }