本文写于2017-10-31,其中的一些思路可能存在问题。本文移至此处时暂未重新学习。

    快速乘是防止爆long long的,一般用的情况是模数也是long long 然后直接相乘可能会爆的那种情况。

    快速幂的原理大概就是把指数变成二进制,就可以把复杂度降到O(log n),比如a^11=a^8a^2a^1

    1. long long p;
    2. long long speedpow(long long a,long long b) //return a^b (^表示乘方)
    3. {
    4. long long ans=1,base=x;
    5. while(b) //当b不为0
    6. {
    7. if(b&1) //即if(b%2==1)
    8. ans=(ans*Base)%p;
    9. Base=(Base*Base)%p;
    10. b>>=1;
    11. }
    12. return ans;
    13. }
    14. long long speedmul(long long a,long long b)
    15. {
    16. long long ans=0;
    17. while(b)
    18. {
    19. if(b&1)
    20. ans=ans*a%p;
    21. a=(a<<1)%p;
    22. b>>=1;
    23. }
    24. return ans;
    25. }