]> www.ginac.de Git - cln.git/blob - src/integer/gcd/cl_I_lcm.cc
* All Files have been modified for inclusion of namespace cln;
[cln.git] / src / integer / gcd / cl_I_lcm.cc
1 // lcm().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cln/integer.h"
8
9
10 // Implementation.
11
12 #include "cl_I.h"
13
14 namespace cln {
15
16 const cl_I lcm (const cl_I& a, const cl_I& b)
17 {
18 // Methode:
19 // a=0 oder b=0 -> Ergebnis 0.
20 // a:=(abs a), b:=(abs b).
21 // g:=ggT(a,b)>0.
22 // Falls g=1, Ergebnis a*b, sonst Ergebnis (a/g)*b.
23       if (eq(a,0)) { return 0; }
24       if (eq(b,0)) { return 0; }
25       // Beträge nehmen:
26      {var cl_I abs_a = abs(a);
27       var cl_I abs_b = abs(b);
28       var cl_I& a = abs_a;
29       var cl_I& b = abs_b;
30       var cl_I g = gcd(a,b);
31       if (!eq(g,1)) { a = exquopos(a,g); } // a durch g (beide >0) dividieren
32       return a*b;
33      }
34 }
35
36 }  // namespace cln