我们用(a1,a2,....)表示最大公因数 [a1,a2,.....]表示最小公倍数
辗转相除法,可以直接使用C语言自带的 c = __gcd(a,b);
辗转相除法原理可以自行百度。
1.使用辗转相除法求a1和a2的最大公因数(a1,a2)
2.使用辗转相除法求(a1,a2)和 a3 的最大公因数(a1,a2,a3);
3.重复,得到(a1,...,an)
代码
int Gcd(int a[],int n){ //多次辗转相处法
int ans = a[0];
for(int i=1;i
1、找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个
2、 aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(4)
3、转到 1
4、 a1,a2,..,an的最大公约数为aj
代码
int Gcd2(int a[],int n){ //变换法
int Min=a[0],pos=0,conter=0;
while(conter
公式:a*b=[a,b]*(a,b)
多个数的最小公倍数并无像两个数的最小公倍数的计算公式
公式:[a1,a2,..,an]=M/(M/a1,M/a2,..,M/an) 其中M为a1,a2,..,an的乘积
1、计算m=a1*a2*..*an
2、把a1,a2,..,an中的所有项ai用m/ai代换
3、找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个
4、aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(6)
5、转到(3)
6、最小公倍数为m/aj
代码:
int Lcm(int a[],int n){
int m=1;
for(int i=0;i
嗯,就是这样。