1. 程式人生 > >C語言——求最大公約數及最小公倍數

C語言——求最大公約數及最小公倍數

href 百度百科 代碼 ret temp max min 常見算法 urn

基本概念

  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

最小公倍數

  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,再回去執行①

代碼實現

最大公約數

  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 ICM2(int x, int y)
{
return x*y / HCD2(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. 百度百科

C語言——求最大公約數及最小公倍數