1. 程式人生 > >演算法:求兩個數的最大公約數與最小公倍數的方法

演算法:求兩個數的最大公約數與最小公倍數的方法

1、計算兩個整數的最大公約數方法有兩種

第一種是使用《九章算術》中的更相減損術方法,“以少減多,更相減損,求其等也,以等數約之,等數約之,即除也,其所以相減者皆等數之重疊,故以等數約之。”其大概意思就是“若分子、分母均為偶數時,可先被2除,否則,將分子與分母之數列在它處,然後以小數減大數,輾轉相減,求它們的最大公約數,用最大公約數去約簡分子與分母。”

程式碼如下:

int maxy(int a,int b)
{
	while(a!=b)
	{
		if(a>b)
		a-=b;
		else
		b-=a;
	}
	return a;
}

第二種就是使用歐幾里德的《幾何原本》中的輾轉相除法,基本思路如下:1.a÷b,令r為所得餘數(0≤r<b)。若r=0,演算法結束;b即為答案;2.互換:置a←b,b←r,並返回第一步。

int many(int a,int b)

{

    int r;

    while(b!=0)

    {

       r=a%b;

       a=b;

       b=r;

    }

    return a;

}

2、計算兩個數最小公倍數的方法

第一種方法就是通過計算出兩個整數的最大公約數來計算最小公倍數,因為最小公倍數與最大公約數的關係就是,兩個數的最小公倍數等於這兩個數的乘積除於兩個數的最大公約數,程式碼如下:

int minb(int a,int b,int x)
{
	return ((a*b)/x);
}