22. Prosireni Euklidov algoritam.
Ako je d = nzd(a, b), onda postoje celi brojevi x i y takvi da je
d = a * x + b * y
Primer:
a = 39, b = 15
39 = 39 * 1 + 15 * 0
15 = 39 * 0 + 15 * 1
9 = 39 * 1 + 15 * (-2)
6 = 15 * 1 + 9 * (-1) = 39 * (-1) + 15 * 3
3 = 9 * 1 + 6 * (-1) = 39 * 2 + 15 * (-5)
int nzdext(int a, int b) {
int c;
int q;
int xa, ya, xb, yb, xc, yc;
// a = ap * xa + bp * ya
xa = 1; ya = 0;
xb = 0; yb = 1;
while (b != 0) {
c = a % b;
q = a / b;
xc = xa – q * xb;
yc = ya – q * yb;
a = b; xa = xb; ya = yb;
b = c; xb = xc; yb = yc;
}
// u a se nalazi nzd, a u xa i ya brojevi za koje vazi
// nzd(ap, bp) = ap * xa + bp * ya
}