1.辗转相除法
辗转相除法是古希腊求两个正整数的最大公约数的,也叫欧几里德算法,其方法是用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数,继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数。以求288和123的最大公约数为例,操作如下:
288÷123=2余42
123÷42=2余39
42÷39=1余3
39÷3=13,所以3就是288和123的最大公约数。
2.代码1
//程序分析:利用辗除法
#include<stdio.h>
int main()
{
int a, b, num1, num2, temp;
printf("请输入两个正整数:");
scanf("%d %d", &num1, &num2);
if (num1 < num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
a = num1;
b = num2;
/*利用辗除法,直到b为0为止*/
while (b != 0)
{
temp = a % b;
a = b;
b = temp;
}
printf("最大公约数是:%d\n", a);
printf("最小公倍数是:%d\n", num1*num2 / a);
代码2(函数调用)
#include<stdio.h>
// 最大公约数,利用辗除法,直到y为0为止
int HCF(int x, int y)
{
int temp2;
while (y != 0)
{
temp2 = x % y;
x = y;
y = temp2;
}
return x;
}
// 最小公倍数函数
int LCM(int x, int y)
{
return (x*y) / HCF(x, y);
}
int main()
{
int a, b, temp1;
printf("请输入两个正整数:");
scanf("%d %d", &a, &b);
if (a < b)
{
temp1 = a;
a = b;
b = temp1;
}
printf("HCF=%d, LCM=%d\n", HCF(a, b), LCM(a, b)); //输出最大公约数和最小公倍数
return 0;
}
3.编译
利用ubuntu gcc编译器进行编译,并运行。
gcc demo_6.1.c -o demo_6.1
./demo_6.1
4.运行结果
5.ubuntu下运行时中文乱码解决
由于原程序在windows下Visual Studio 2017 Preview进行编写,编译运行是在ubuntu下,Windows下中文的默认编码是GB2312,而Linux下默认编码是utf-8,要使ubuntu终端能显示中文字符,将终端字符编码设置成GB2312。
但是这只是临时设置,关闭终端后,字符编码又会返回系统默认的utf-8模式,如果想永久设置,参考博客解决Ubuntu中文显示为乱码
6.参考
1.https://blog.youkuaiyun.com/LiuJiuXiaoShiTou/article/details/53414398
2.https://blog.youkuaiyun.com/xuezhisdc/article/details/52587431