今天尝试用x264来压制文件时,看到x264cli.h文件里竟然有求最大公约数和最小公倍数的函数,使我想起了刚学计算机编程时老师教的一个求最大公约数的程序,在这里却实现的比较简单。源码如下:
static inline uint64_t gcd( uint64_t a, uint64_t b )
{
while( 1 )
{
int64_t c = a % b;
if( !c )
return b;
a = b;
b = c;
}
}
这里求最大公约数使用的方法是辗转相除法,最大公约数求得了再求最小公倍数就是两数之积除以它。
static inline uint64_t lcm( uint64_t a, uint64_t b )
{
return ( a / gcd( a, b ) ) * b;
}
求最大公约数的一个用途就是约分(reduce fraction),将假分数化为真分数。