您的位置:首页 > 其它

欧几里德算法,扩展的欧几里德算法

2013-09-20 10:28 211 查看
1.欧几里德算法

:求最大公约数

unsigned Gcd(unsigned n , unsigned m)
{
int max = n > m ? n : m ;
int min = n + m - max ;
int temp ;
while((temp = max % min))
{
max = min ;
min = temp ;
}
return min ;
}

:求最小公倍数

unsigned Lcm(unsigned n , unsigned m)
{
return n * m / Gcd(n , m) ;
}

2.扩展的欧几里德算法

:求最大公约数

unsigned Gcd2(unsigned n , unsigned m)
{
int x[3] , y[3] ;
x[1] = y[0] = 1 ;
x[0] = y[1] = 0 ;

int max = n > m ? n : m ;
int min = n + m - max ;

int temp , i  ;

for(i = 0 ; (temp = max % min) ; ++i)
{
x[(i+5)%3] = x[(i+4)%3] * (max / min) * (-1) + x[(i+3)%3] ;
y[(i+5)%3] = y[(i+4)%3] * (max / min) * (-1) + y[(i+3)%3] ;

max = min ;
min = temp ;
}

return x[(i+4)%3]*n + y[(i+4)%3]*m ;
}

:求最小公倍数

unsigned Lcm2(unsigned n , unsigned m)
{
return n * m / Gcd2(n , m) ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: