00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef INCLUDE_VAUCANSON_MISC_ALGEBRA_HXX
00019 # define INCLUDE_VAUCANSON_MISC_ALGEBRA_HXX
00020
00021 # include <vaucanson/misc/algebra.hh>
00022
00023 namespace vcsn {
00024
00025 namespace misc {
00026
00027
00028 template<typename T>
00029 inline
00030 T
00031 gcd (T a, T b)
00032 {
00033 if (0 == a)
00034 return b;
00035 T s=1;
00036 if(b < 0){
00037 s=-1;
00038 b=-b;
00039 }
00040 if(a<0)
00041 a=-a;
00042 T r;
00043 while (0 != b)
00044 {
00045 r = a % b;
00046 a = b;
00047 b = r;
00048 }
00049 return a*s;
00050 }
00051
00052 template<typename T>
00053 inline
00054 T
00055 lcm (T a, T b)
00056 {
00057 T res = gcd (a, b);
00058 if (res)
00059 return a /res * b;
00060 return T(0);
00061 }
00062
00063 template<typename T>
00064 inline
00065 bool
00066 is_coprime (T a, T b)
00067 {
00068 T g=gcd (a, b);
00069 return 1 == g || -1 == g;
00070 }
00071
00072 template<typename T>
00073 inline
00074 T abs (T a)
00075 {
00076 return a > 0 ? a : -a;
00077 }
00078 }
00079
00080 }
00081 #endif // !INCLUDE_VAUCANSON_MISC_ALGEBRA_HXX