Сначала вы должны реализовать Extended Euclidean Algorithm :
public static BigInteger Egcd(BigInteger left,
BigInteger right,
out BigInteger leftFactor,
out BigInteger rightFactor) {
leftFactor = 0;
rightFactor = 1;
BigInteger u = 1;
BigInteger v = 0;
BigInteger gcd = 0;
while (left != 0) {
BigInteger q = right / left;
BigInteger r = right % left;
BigInteger m = leftFactor - u * q;
BigInteger n = rightFactor - v * q;
right = left;
left = r;
leftFactor = u;
rightFactor = v;
u = m;
v = n;
gcd = right;
}
return gcd;
}
И затем
public static BigInteger ModInverse(BigInteger value, BigInteger modulo) {
BigInteger x, y;
if (1 != Egcd(value, modulo, out x, out y))
throw new ArgumentException("Invalid modulo", "modulo");
if (x < 0)
x += modulo;
return x % modulo;
}
В Vim y
, d
, p
и т. Д. Принадлежат друг другу. Чтобы иметь возможность эффективно использовать Vim, все они должны использовать один и тот же регистр / буфер обмена по умолчанию. Вместо этого используйте "+y
или "*y
для явного копирования в системный буфер обмена.
Если вам нужен удобный ярлык, вы можете определить для него новую привязку клавиш, например, nnoremap \y "+y
.