c语言求最大公约数和最小公倍数(转)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c语⾔求最⼤公约数和最⼩公倍数(转)
最⼤公约数与最⼩公倍数的求解是很多初学C的⼈所⾯临的⼀道问题。

当然这道问题并不难解答,也有很多⼈已经写过相关的博客,我在此书写此篇博客,⼀是为了让⾃⼰能够夯实基础,另外就是希望能够帮到和我⼀样的初学者。

当然,在写这篇博客之前,我已经做过相关资料的调查,可能读者会发现此篇博客会与其他⼈的博客有所重复,但是,我保证绝未抄袭。

好了,进⼊正题!
问题:请从键盘上输⼊两个数值 x,y,请⽤C语⾔求出这两个数值的最⼤公约数与最⼩公倍数。

⾸先,我们要想解决这道问题,就要了解什么是最⼤公约数与最⼩公倍数。

最⼤公因数;也称最⼤、最⼤公,指两个或多个共有中最⼤的⼀个。

----来源百度百科
最⼩公倍数:两个或多个公有的倍数叫做它们的公倍数。

----来源百度百科
了解了其含义,接下来就是构思算法,通常⽽⾔,求解最⼤公约数有三种算法,⽽最⼩公倍数的求解,我们可以很容易的推断出,最⼩公倍数等于两个数值的乘积除以这两个数值的最⼤公约数。

那么接下来的算法我将在此⼀⼀进⾏列举和解释。

1.辗转相除法:
⼜名(Euclidean algorithm),它是已知最古⽼的算法,其可追溯⾄公元前300年前。

----来源百度百科
辗转:望⽂⽣义,就是翻来覆去。

相除就很好理解了,就是进⾏除法运算。

辗转相除法的核⼼就是不断的让两个数做除法运算。

其原理基于两个整数的最⼤公约数等于其中较⼩的数和两数的相除余数的最⼤公约数。

假设两数为 x,y。

先令 z = x % y ;
之后 y 赋给 x 即令 x = y ;
再将 z 赋给 y 即令 y = z;
辗转相减,其终⽌条件为:y 等于0时。

代码如下:
[csharp]
1. #include<stdio.h>
2. int main()
3. {
4. int x, y, z, m, n;
5. printf("请输⼊两个数:");
6. scanf_s("%d%d", &x, &y);
7. m = x, n = y;
8. while (y != 0)
9. {
10. z = x%y;
11. x = y;
12. y = z;
13. }
14. printf("最⼤公约数是: %d\n", x);
15. printf("最⼩公倍数是: %d\n", m*n / x);
16. system("pause");
17. return 0;
18. }
2.辗转相减法:
即,其特⾊是做⼀系列减法,从⽽求得。

----来源百度百科
辗转相减法即通过对两数的不断减法运算。

假设两数为 x, y。

当 x > y 时,令 x = x - y;
反之,则令 y = y - x;
之后⼀直辗转相减,直⾄ x = y 时,终⽌。

代码如下:
[csharp]
1. #include<stdio.h>
2. int main()
3. {
4. int x, y, m, n;
5. printf("请输⼊两个数:");
6. scanf_s("%d%d", &x, &y);
7. m = x, n = y;
8. while (x!=y)
9. {
10. if (x>y)
11. x = x-y;
12. else
13. y = y-x;
14. }
15. printf("最⼤公约数是: %d\n", x);
16. printf("最⼩公倍数是: %d\n", m*n / x);
17. system("pause");
18. return 0;
19. }
3.穷举法:
穷举法的基本思想是根据题⽬的部分条件确定答案的⼤致范围,并在此范围内对所有可能的情况逐⼀验证,直到全部情况验证完毕。

----来源百度百科
穷举法⼜称枚举法,通过对数值范围内的所有数字进⾏检验,得出其结果。

代码如下:
[csharp]
1. #include<stdio.h>
2. int main()
3. {
4. int x, y, i, m, n;
5. printf("请输⼊两个数:");
6. scanf_s("%d%d", &x, &y);
7. m = x, n = y;
8. for (i = 1; i <= x; i++)
9. {
10. if (x%i == 0 && y%i == 0)
11. }
12. for (i = x; i > 0; i--)
13. {
14. if (x%i == 0 && y%i == 0)
15. }
16. printf("最⼤公约数是: %d\n", i);
17. printf("最⼩公倍数是: %d\n", m*n / i);
18. system("pause");
19. return 0;
20. }
以上即为求解最⼤公约数与最⼩公倍数的三种算法,如有纰漏,还请各位不吝赐教。

相关文档
最新文档