用代码求多个数的最大公约数
我们先求两个数 a,b 的最大公约数
能想到的第一个方法就是暴力求解,代码如下:
int gcd(int a,int b){ // 求 a,b 的最大公约数
for(int i=min(a,b);i>=1;i--){
if(a%i==0&&b%i==0){ // 此时 i 是最大的同时整除 a,b 的整数
return i;
}
}
}
时间复杂度 O( min(a,b) )
那么,有没有更优的方法呢
有,欧几里得算法(也叫辗转相除法)
先看代码:
int gcd(int a,int b){ // 求 a,b 的最大公约数
if(b==0){
return a;
}
return gcd(b,a%b);
}
时间复杂度 O ( log