您的位置:首页 > 其它

求最大公约数和最小公倍数

2018-01-29 16:14 211 查看
辗转相除法求最大公因数

辗转相除法:(简单来说)两个数,用较大的数除以较小的数,得到第一余数,在用较小的数除以第一个余数,得到第二余数,在用第二个余数除以第一余数,重复过程,直到到余数为0;那么最后一个余数就是这两个数的最大公约数;

举例说明:

a = 36, b = 10;

1. 36除以10得3, 余6

2. 10除以6得1, 余4

3. 6除以4得1, 余2

4. 4除以2等于0

所以36和10的最大公约数为2

#include<stdio.h>
int main()
{

int a = 50;
int b = 36;
if (a > b)
{
int tmp = a;
a = b;
b = tmp;
}
while (a%b!=0)
{
int r = a%b;
a = b;
b = r;
}
printf("最大公约数是:%d",b);
return 0;
}


上述程序中判断了a和b值得大小,当a小于b时,可以不用专门比较并交换两个数,如以下程序所示:

#include<stdio.h>
int main()
{
int a = 36;
int b = 50;
while (a%b != 0)      //a%b==36
{
int tmp = a%b;      //第一次循坏实现了a,b的交换;
a = b;
b = tmp;
}
printf("最大公因数为:%d\n", b);
return 0;
}


两个数的最小公倍数

求最小公倍数:两个数相乘,然后除以它们的最大公因数即为最小公倍数

#include<stdio.h>
int main()
{
int a = 36;
int b = 50;
int c =a*b;
while (a%b != 0)
{
int tmp = a%b;
a = b;
b = tmp;
}
printf("最小公倍数为:%d\n", c/b);      //c是两个数的乘积
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: