BLueberry_Pie的博客

This is BLueberry_Pie's blog

C语言求解最大公约数与最小公倍数

1.辗转相除法 

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

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

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

假设两数为 x,y。

先令 z = x % y ;

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

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

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

代码如下:

[csharp] view plain copy
  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] view plain copy
  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] view plain copy
  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. }  
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BLueberry_Pie/article/details/79962413
文章标签: C 算法
个人分类: C 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

C语言求解最大公约数与最小公倍数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭