annotate scripts/elfun/gcd.m @ 904:3470f1e25a79

[project @ 1994-11-09 21:22:15 by jwe]
author jwe
date Wed, 09 Nov 1994 21:22:15 +0000
parents 6544b83ef9e9
children 9fc405c8c06c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
1 function [g, v] = gcd (a, ...)
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
2
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
3 # [g [, v]] = gcd (a) returns the greatest common divisor g of the
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
4 # entries of the integer vector a, and an integer vector v such that
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
5 # g = v(1) * a(k) + ... + v(k) * a(k).
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
6 #
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
7 # [g [, v]] = gcd (a1, ..., ak) is the same with a = [a1, ..., ak].
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
8
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
9 # Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Sep 16, 1994
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
10 # Copyright Dept of Statistics and Probability Theory TU Wien
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
11
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
12 if (nargin > 1)
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
13 va_start;
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
14 for k = 2:nargin;
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
15 a = [a, va_arg ()];
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
16 endfor
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
17 endif
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
18
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
19 if (round (a) != a)
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
20 error ("gcd: all arguments must be integer");
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
21 endif
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
22
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
23 g = abs (a(1));
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
24 v = sign (a(1));
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
25 for k = 1:(length (a) - 1)
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
26 x = [g, 1, 0];
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
27 y = [abs (a(k+1)), 0, 1];
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
28 while (y(1) > 0)
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
29 r = x - y * floor (x(1) / y(1));
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
30 x = y;
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
31 y = r;
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
32 endwhile
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
33 g = x(1);
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 715
diff changeset
34 v = [x(2) * v, x(3) * sign (a(k+1))];
715
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
35 endfor
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
36
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
37 endfunction
6544b83ef9e9 [project @ 1994-09-20 18:40:02 by jwe]
jwe
parents:
diff changeset
38