#ifndef BOOST_MATH_COMMON_FACTOR_RT_HPP #define BOOST_MATH_COMMON_FACTOR_RT_HPP namespace boost { namespace math { // TODO: use binary GCD for unsigned integers .... template < typename IntegerType > IntegerType gcd( IntegerType a, IntegerType b ) { const IntegerType zero = (IntegerType)0; while ( true ) { if ( a == zero ) return b; b %= a; if ( b == zero ) return a; a %= b; } } template < typename IntegerType > IntegerType lcm( IntegerType a, IntegerType b ) { const IntegerType t = gcd (a,b); if (!t)return t; return a / t * b; } }} #endif