C語言——求最大公約數及最小公倍數
阿新 • • 發佈:2017-12-21
href 百度百科 代碼 ret temp max min 常見算法 urn
基本概念
- 最小公倍數:兩個或多個整數公有的倍數叫做它們的公倍數。整數a,b的最小公倍數記為[a,b],同樣的,a,b,c的最小公倍數記為[a,b,c],多個整數的最小公倍數也有同樣的記號。
- 最大公約數:也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個。a,b的最大公約數記為(a,b),同樣的,a,b,c的最大公約數記為(a,b,c),多個整數的最大公約數也有同樣的記號。
- 關於最小公倍數與最大公約數,我們有這樣的定理:(a,b)[a,b]=ab(a,b均為整數)。
方法分析
最大公約數
- 輾轉相除法:
設兩數為a、b(a≥b),求a和b最大公約數的步驟如下:
① a%b得余數c
② 若c=0,則b即為兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行① - 更相減損法:
設兩數為a、b,求a和b最大公約數的步驟如下:
① 若a>b,則a=a-b
② 若a
最小公倍數
- (a,b)[a,b]=ab
先算出ab及[a,b]相除即為最小公倍數。 - 窮舉法:
設兩數為a、b(a≥b),t=a,i=1求a和b最小公倍數的步驟如下:
① a%b得余數c
② 若c=0,則a即為兩數的最小公倍數
③ 若c≠0,則i=i+1,a=t*i,再回去執行①
代碼實現
最大公約數
- 輾轉相除法:
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; }
- 更相減損法:
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); //遞歸
}
最小公倍數
- (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); }
- 窮舉法:
//求最小公倍數
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;
}
參考文章:
- 常見算法:C語言求最小公倍數和最大公約數三種算法——CSDN
- C語言計算2個數的最小公倍數——博客園
- 百度百科
C語言——求最大公約數及最小公倍數