public static BigInteger DivRem(BigInteger x, BigInteger y, out BigInteger remainder) {
if (object.ReferenceEquals(x, null)) {
throw new ArgumentNullException("x");
}
if (object.ReferenceEquals(y, null)) {
throw new ArgumentNullException("y");
}
uint[] q;
uint[] r;
DivModUnsigned(x.data, y.data, out q, out r);
remainder = new BigInteger(x.sign, r);
return new BigInteger(x.sign * y.sign, q);
}