最大公约数--巧妙的一行代码

常见的求法是for循环穷举,但其实可以使用辗转相除法与递归结合!!!

一行代码的求法:(结果是可能为1的)

int gcd(int x, int y) {
    return x == 0 ? y : gcd(y%x, x);
}
原理:辗转相除法和递归的结合

拓展:

最大公约数 * 最小共倍数= x * y

求一个数组的最大公约数:

int g=-1;
for(int num:nums){
    if(g==-1) g=num;
    else g=gcd(g,num);
}
return g;    

ATFWUS --Writing By 2020–03–18

发布了126 篇原创文章 · 获赞 142 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ATFWUS/article/details/104942235