7.31训练总结

    今天上午主要看了逆元以及中国剩余定理的内容,下午主要做了一下练习赛的5个题目。

    先说一下练习赛的情况,大部分题目不是很难,但题目意思真的不好理解,之后搜了一下原题,发现之前有好多理解错的地方,所以简单问题复杂化。

    然后对于逆元,主要看了一下快速幂的解法:

    首先,逆元的作用:逆元是当我们求 (a/b) mod c时,由于b可能极大,导致最后出现精度问题,所以我们将a/b变为 a*b^-1,因此问题也就转换为求b的逆元。

    其次,对于快速幂解法,因为其用到了费马小定理a^(p-1)≡1(mod  p),所以有限定条件:a与p互质。

    最后,快速幂的实现:由费马小定理可知:a*a^(p-2)≡1(mod p),所以a 的逆元即a^(p-2)。

因此快速幂实现思路:(以 2^5为例)

      5的二进制表示:0101 ==> 1*2^0+0*2^1+1*2^2+0==1*2^0+1*2^2==5;

      因此原式=2^(2^0+2^2) =  =2 ^ (2^0)    *     2 ^ (2^2)  ,我们发现2^2=2^0* 2^2,所以有“==”右边:后者=前者平方的平方,考虑上述两式在二进制中位置号差2,所以推得原式拆分为幂指积的形式后的各项之间为跑男各方关系:

实现代码:

long long fast_pow(int a,int b)//long long类型
{
    int ans=1,base=a;
    while(b != 0)
    {
        if( b&1 != 0 )//判断末尾是否为零,为零跳过;
        {
            ans*=base;
        }
        base*=base;//上一项的平方
        b>>=1;
    }
    return ans;
}

总结一句:对于一些不好理解的问题,能否先记住,再慢慢领会。

猜你喜欢

转载自blog.csdn.net/qq_41661919/article/details/81319708