Swap-Aggregator-Subgraph/node_modules/asmcrypto.js/dist_es5/bignum/extgcd.js
Richa-iitr d211083153 Revert "Revert "added handler""
This reverts commit c36ee8c5ca.
2022-07-03 07:30:05 +05:30

71 lines
1.7 KiB
JavaScript
Executable File

import { BigNumber } from './bignum';
export function Number_extGCD(a, b) {
var sa = a < 0 ? -1 : 1, sb = b < 0 ? -1 : 1, xi = 1, xj = 0, yi = 0, yj = 1, r, q, t, a_cmp_b;
a *= sa;
b *= sb;
a_cmp_b = a < b;
if (a_cmp_b) {
t = a;
(a = b), (b = t);
t = sa;
sa = sb;
sb = t;
}
(q = Math.floor(a / b)), (r = a - q * b);
while (r) {
(t = xi - q * xj), (xi = xj), (xj = t);
(t = yi - q * yj), (yi = yj), (yj = t);
(a = b), (b = r);
(q = Math.floor(a / b)), (r = a - q * b);
}
xj *= sa;
yj *= sb;
if (a_cmp_b) {
t = xj;
(xj = yj), (yj = t);
}
return {
gcd: b,
x: xj,
y: yj,
};
}
export function BigNumber_extGCD(a, b) {
var sa = a.sign;
var sb = b.sign;
if (sa < 0)
a = a.negate();
if (sb < 0)
b = b.negate();
var a_cmp_b = a.compare(b);
if (a_cmp_b < 0) {
var t = a;
(a = b), (b = t);
var t2 = sa;
sa = sb;
sb = t2;
}
var xi = BigNumber.ONE, xj = BigNumber.ZERO, lx = b.bitLength, yi = BigNumber.ZERO, yj = BigNumber.ONE, ly = a.bitLength, z, r, q;
z = a.divide(b);
while ((r = z.remainder) !== BigNumber.ZERO) {
q = z.quotient;
(z = xi.subtract(q.multiply(xj).clamp(lx)).clamp(lx)), (xi = xj), (xj = z);
(z = yi.subtract(q.multiply(yj).clamp(ly)).clamp(ly)), (yi = yj), (yj = z);
(a = b), (b = r);
z = a.divide(b);
}
if (sa < 0)
xj = xj.negate();
if (sb < 0)
yj = yj.negate();
if (a_cmp_b < 0) {
var t = xj;
(xj = yj), (yj = t);
}
return {
gcd: b,
x: xj,
y: yj,
};
}