C语言C语言——求最大公约数及最小公倍数

基本概念

  1. 最小公倍数:两独或多独整数公有的翻番叫做它们的倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也发生同的标志。
  2. 最大公约数:也如最大公约数、最要命公因子,指区区单或多单整数共有约数中极老之一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多单整数的最大公约数也时有发生雷同的符。
  3. 关于最小公倍数与最大公约数,我们发出这样的定律:(a,b)[a,b]=ab(a,b均为整数)。

方分析

最大公约数

  1. 辗转相除法:
    设若两屡也a、b(a≥b),求a和b最大公约数的步骤如下:
    ① a%b得余数c
    ② 若c=0,则b即为寡数的最大公约数
    ③ 若c≠0,则a=b,b=c,再回执行①
  2. 还相减损法:
    要是两屡次为a、b,求a和b最大公约数的手续如下:
    ① 若a > b,则a=a-b。
    ② 若a < b,则b=b-a。
    ③ 若a = b,则a(或b)即为寡反复之最大公约数。
    ④ 若a ≠ b,则重复回执行①。
    譬如说求27及15底最大公约数过程吧:
    27-15=12( 15>12 ) 15-12=3( 12>3 )
    12-3=9( 9>3 ) 9-3=6( 6>3 )
    6-3=3( 3==3 )
    故此,3即使为最大公约数。

最小公倍数

  1. (a,b)[a,b]=ab
    先算出ab及[a,b]相除即为最小公倍数。
  2. 穷举法:
    苟两往往也a、b(a≥b),t=a,i=1求a跟b最小公倍数的步骤如下:
    ① a%b得余数c
    ② 若c=0,则a即为少屡屡的最小公倍数
    ③ 若c≠0,则i=i+1,a=t*i,再回来执行①

代码实现

C语言最大公约数

  1. 辗转相除法:

int HCD(int x, int y)
{
    int temp;
    if (x < y)  //如果x<y交换x,y
    {
        temp = x;
        x = y;
        y = temp;
    }
    while (x%y)         //x%y!=0时 
    {
        temp = x;    
        x = y;          //将y赋给x
        y = temp % y;   //余数赋给y
    }
    //直到x%y == 0时y为最大公约数
    return y;

}
  1. 重复相减损法:

int HCD(int x, int y)
{
    int MAX = x > y ? x : y;
    int MIN = x < y ? x : y;
    int TEMP = MAX - MIN;

    if (TEMP == 0)
        return MAX;  //递归终止
    else
        HCD(TEMP, MIN);//递归

}

最小公倍数

  1. (a,b)[a,b]=ab

//求最大公约数  辗转相除法
int HCD(int x, int y)
{
    int temp;
    if (x < y)  //如果x<y交换x,y
    {
        temp = x;
        x = y;
        y = temp;
    }
    while (x%y)         //x%y!=0时 
    {
        temp = x;
        x = y;          //将y赋给x
        y = temp % y;   //余数赋给y
    }
    //直到x%y == 0时y为最大公约数
    return y;

}
//求最小公倍数(a,b)[a,b]=ab
int ICM(int x, int y)
{
    return x*y / HCD(x, y);
}
  1. 穷举法:

//求最小公倍数
int ICM(int x, int y)
{
    int temp;
    int i = 1;
    if (x < y)     //如果x<y交换x,y
    {
        temp = x;
        x = y;
        y = temp;
    }
    temp = x;
    while (x%y)    //x%y!=0时
    {
        i++;
        x = temp * i;//将x*1、x*2...赋给x
    }
    //直到x%y == 0时x为最小公倍数
    return x;

}

参考文章:

  1. 大规模算法:C语言求最小公倍数和最大公约数三栽算法——CSDN
  2. C语言计算2单数之最小公倍数——博客园
  3. 百度百科