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);
}