MathHelper { public static BigIntegerTripple extendedEuclid(BigInteger u, BigInteger v) { BigInteger r = BigInteger.ONE; BigInteger s = BigInteger.ZERO; BigInteger c = u; BigInteger v1 = BigInteger.ZERO; BigInteger v2 = BigInteger.ONE; BigInteger v3 = v; while (!v3.equals(BigInteger.ZERO)) { BigInteger q = c.divide(v3); BigInteger t1 = r.subtract(q.multiply(v1)); BigInteger t2 = s.subtract(q.multiply(v2)); BigInteger t3 = c.subtract(q.multiply(v3)); r = v1; s = v2; c = v3; v1 = t1; v2 = t2; v3 = t3; } return new BigIntegerTripple(c, r, s); } private  MathHelper(); static BigInteger intfloordiv(BigInteger c, BigInteger d); static BigInteger intceildiv(BigInteger c, BigInteger d); static int intfloordiv(int c, int d); static int intceildiv(int c, int d); static BigIntegerTripple extendedEuclid(BigInteger u, BigInteger v); static BigInteger gcd(BigInteger u, BigInteger v); static BigInteger inverseMod(BigInteger a, BigInteger p); static BigInteger CRT(BigInteger[] congs, BigInteger[] moduli); static BigInteger CRT(List<BigInteger> congs, List<BigInteger> moduli); static BigInteger bigIntSqRootFloor(BigInteger x); static BigInteger bigIntSqRootCeil(BigInteger x);  }
@Test public void testExtendedEuclid() { }