刚刚做了有关位运算的题目,又想起前不久看到的快速幂,里面同样有位运算,所以这个时候想总结一下·,先上代码
long long quick_pow(long long x,long long p,long long mod)
{
long long ret=1;
while(p)
{
if(p&1)
ret=ret*x%mod;
p>>=1;
x=x*x%md;
}
return ret;
}
刚才听学长的一番解释,顿时恍然大悟,对快速幂的理解深刻了不少,以后不用被着快速幂代码跑了,自己就会写了。
说到这里,又想起来求最大公约数的递归版本,本来也是背着代码跑的,但是后来我记住它了,就 不怎么背着代码跑了但是还是不怎么会,上打码
int gcd(int a,int b)
{
return b==0?a:return (b,a%b);
}
其实平心而论,这个感觉还是碾转相除法,本来高中的时候这个学的就不怎么好,下面上一段百度百科