]> www.ginac.de Git - cln.git/blob - src/integer/gcd/cl_I_lcm.cc
e7837ef774b6e2cfdd4ba44c2e72711d37c723a7
[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 "cl_integer.h"
8
9
10 // Implementation.
11
12 #include "cl_I.h"
13
14 const cl_I lcm (const cl_I& a, const cl_I& b)
15 {
16 // Methode:
17 // a=0 oder b=0 -> Ergebnis 0.
18 // a:=(abs a), b:=(abs b).
19 // g:=ggT(a,b)>0.
20 // Falls g=1, Ergebnis a*b, sonst Ergebnis (a/g)*b.
21       if (eq(a,0)) { return 0; }
22       if (eq(b,0)) { return 0; }
23       // Beträge nehmen:
24      {var cl_I abs_a = abs(a);
25       var cl_I abs_b = abs(b);
26       var cl_I& a = abs_a;
27       var cl_I& b = abs_b;
28       var cl_I g = gcd(a,b);
29       if (!eq(g,1)) { a = exquopos(a,g); } // a durch g (beide >0) dividieren
30       return a*b;
31      }
32 }