算法日记-1:最大公约数、最小公倍数
这是作者的第二篇文章,之所以从最大公约数讲起是因为它够基础。
最大公约数的基础原理别的文章有讲,本文章只包括标程和具体使用注意事项。
最大公约数
long long gcd(long long a,long long b)
{
if(a<b)
swap(a,b);
if(b==0)
return a;
return gcd(b,a%b);
}
最大公约数本身没有什么可注意的,但是它时间复杂度优秀又是很多数论的基础,所以一定要背的死死的。
最小公倍数
第一种方法:一般来讲都会用两个数相乘再除以两个数的最大公约数,但是有些毒瘤题会要求你取模,千万记住 取模不除 。
第二种方法:遇到这种情况就需要用到分解质因数的知识。其实在实际数学中,我们一般不用第一种方法,而是将两个数分解质因数,每个质因子取在两个数中分解出来的最高次幂。具体来说是这样的
相同颜色的笔圈出的是相同质因子的幂次,每个质因子的幂次取最大值再相乘就是答案。
具体实现起来比较困难,网上大部分算法是n方的,有种很复杂的Pollard_rho 算法可以达到n的四分之一次方,相当优秀,具体的我不讲了,传送门