快速幂与快速乘

快速幂

快速幂顾名思义就是求一个数的次幂,想到这你肯定会想直接for循环跑一边不久行了吗,但用for循环它的时间复杂度为O(n),而快速幂的时间复杂度为log(n),比暴力快很多,其实快速幂用的思想就是二进制化求解代码:
举个例子,像求2的5次幂,首先看5的二进制是101,根据代码,就是求在1时的次幂,如果在这一位为0,就让它往前移一位,也就是a=a*a,这就是往前移一位的功能

  int fast_pow(int a,int b,int c)//函数功能求a的b次幂然后结果去对c取模
{
    int ans=1;
    a%=c;
    while(b)
    {
        if(b&1)
            ans=a*ans%c;
        a=a*a%c;
        b>>=1;
    }
    return ans%c;
}
           

快速乘

快速乘与快速幂的思想是一样的,代码也比较类似,在这就不多说了,直接上模板:

   int fast_mul(int a,int b,int c)
{
    int ans=0;
    a%=c;
    while(b)
    {
        if(b&1)
            ans=(a+ans)%c;
        a=(a+a)%c;
        b>>=1;
    }
    return ans%c;
}
           

你可能感兴趣的:(知识整理,自我感悟)