C计算两个整数的最大公约数和最小公倍数

Posted LIFE TAKES ATTITUDES

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C计算两个整数的最大公约数和最小公倍数相关的知识,希望对你有一定的参考价值。

数学知识背景记录:

任何>1的整数都可以写成一个或多个素数因子乘积的形式,且素数乘积因子以非递减序出现。

则整数x,y可以分别标记为:
x=p1x1p2x2...pmxm

y=p1y1p2y2...pmym

(其中p1,p2,....是素数,若有必要素数因子的指数xj或yj可以为0)

(1)最大公约数 gcd(x,y)=p1min(x1,y1)p2min(x2,y2)...pmmin(xm,ym)

(2)最小公倍数 lcm(x,y)=p1max(x1,y1)p2max(x2,y2)...pmmax(xm,ym)

(3)因此,亦可得:lcm(x,y)*gcd(x,y)=x*y

按如上思路计算gcd(x,y)//函数 int get_gcd(int x,int y);

 

实际上若是单纯的计算最大公约数和最小公倍数可以不必这么复杂,可以从大到小遍历min(x,y)的约数,找到的第一个公约数即为所求。

 1 int get_gcd(int x,int y)
 2 {
 3     int temp;
 4     int i;
 5     if(x>y)
 6     {
 7         temp=x;
 8         x=y;
 9         y=temp;
10     }
11     if(y%x==0)
12         return x;
13     for(i=x/2;i>1;i--)
14         if(x%i==0)
15             if(y%i==0)
16                 return i;    
17     return 1;
18 }
19 
20 int get_lcm(int x,int y)
21 {
22  return (x*y)/(get_gcd(x,y));
23 }

 

以上是关于C计算两个整数的最大公约数和最小公倍数的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程

C语言函数编写,求两个整数的最大公约数和最小公倍数

c语言:输入两个整数,计算并输出这两个整数的和·平均数·最大值·最小值?

c语言:输入两个整数,计算并输出这两个整数的和·平均数·最大值·最小值?

计算两个整数的最大公约数和最小公倍数

c语言辗转相除法求最大公约数和最小公倍数