您的位置:首页 > 其它

欧几里得辗转相除求最大公约数最小公倍数

2016-04-12 20:40 375 查看
最大公约数:

第一种方法:

递归:

int gcd(int m, int n)

{

int temp;

if(m < n)//m less than n change

{

temp = m;

m = n;

n = temp;

}

if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0

return n;

else

return gcd(n,m%n);//欧几里得辗转相除法求最大公约数 gcd(m,n) == gcd(n,m%n) 递归可得

}

第二种方法:

循环:

int gcd2(int m, int n)

{

int temp, k;

if(m < n)//m less than n change

{

temp = m;

m = n;

n = temp;

}

if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0

return n;

while(m % n != 0)

{

k = m;//k 存一下m的值

m = n;//新的m 的值 为 n

n = k % n;//n 的值在这个表达式之前没变

if(m%n == 0)

return n;

}

}

最小公倍数:

最小公倍数为两个数之乘除于最大公约数

int gbs(int m, int n)

{

return m*n / gcd(m,n);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: