inline int gcd(int a,int b) { if(b) while((a%=b) && (b%=a)); return a+b; }为什么这个可以求最大公约数 原理是什么
时间: 2024-04-04 21:05:31 浏览: 38
gcd(a,b),求两个数最大公约数
5星 · 资源好评率100%
这个函数使用了欧几里得算法来求解最大公约数(Greatest Common Divisor,简称GCD)。欧几里得算法的原理是通过不断取两个数的余数来逐步缩小问题规模,直到找到最大公约数。
具体来说,该函数中的while循环通过不断取a对b的余数和b对a取余数,然后更新a和b的值,直到其中一个数变为0为止。最后,返回的a+b就是最大公约数。
这个算法的正确性可以通过欧几里得算法的定理来证明,定理表明两个整数的最大公约数等于其中较小的数和这两个数的差的最大公约数。因此,每次取余操作都在不改变最大公约数的前提下减小了问题的规模,直到找到最终的最大公约数。
该算法的时间复杂度为O(log(min(a,b))),其中a和b是输入的两个整数。
阅读全文