extGcd

a*T[0]+b*T[1]=T[2], T[2]=gcd

T[3]
extGcd
(
T
)
(
in T a
,
in T b
)
if (
!isIntegral!T ||
isSigned!T
)

Examples

import std.numeric : gcd;
foreach (i; 0..100) {
    foreach (j; 0..100) {
        auto e = extGcd(i, j);
        assert(e[2] == gcd(i, j));
        assert(e[0] * i + e[1] * j == e[2]);
    }
}

Meta