ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C语言三种算法求解最大公约数与最小公倍数

2021-01-26 20:36:23  阅读:161  来源: 互联网

标签:算法 公倍数 最小 C语言 int 最大公约数 printf


C语言三种算法求解最大公约数与最小公倍数

最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题。当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者。

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

问题:请从键盘上输入两个数值 x,y,请用C语言求出这两个数值的最大公约数与最小公倍数。

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

最大公因数;也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。----来源百度百科

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

了解了其含义,接下来就是构思算法,通常而言,求解最大公约数有三种算法,而最小公倍数的求解,我们可以很容易的推断出,最小公倍数等于两个数值的乘积除以这两个数值的最大公约数。那么接下来的算法我将在此一一进行列举和解释。

1.辗转相除法: 

又名欧几里德算法(Euclidean algorithm),它是已知最古老的算法, 其可追溯至公元前300年前。 ----来源百度百科

辗转:望文生义,就是翻来覆去。相除就很好理解了,就是进行除法运算。

辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。

假设两数为 x,y。

先令 z = x % y ;

之后 y 赋给 x 即令  x = y ;

再将 z 赋给 y 即令  y = z;

辗转相减,其终止条件为:y 等于0时。 

代码如下:

 

  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 时,终止。

代码如下:

 

  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.穷举法:

穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。----来源百度百科

穷举法又称枚举法,通过对数值范围内的所有数字进行检验,得出其结果。

代码如下:

  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 = x; i > 0; i--)
  9.   {
  10.   if (x%i == 0 && y%i == 0)
  11.   break;
  12.   }
  13.   printf("最大公约数是: %d\n", i);
  14.   printf("最小公倍数是: %d\n", m*n / i);
  15.   system("pause");
  16.   return 0;
  17.   }

 


以上即为求解最大公约数与最小公倍数的三种算法,如有纰漏,还请各位不吝赐教。

标签:算法,公倍数,最小,C语言,int,最大公约数,printf
来源: https://www.cnblogs.com/fdsjf/p/14332261.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有