7.常用模板

7.1快速幂

利用公式,可以直接用底数平方、指数除以2的方式,这样指数降到0只需要log(n)次,因此复杂度仅需O(logn),比朴素的模拟乘方法的O(n)要优秀很多。

模板如下:

long long power(long long a,long long b,int mod) { //计算a的b次方对mod取模的值

long long res=1;

while(b){

if(b&1)res=res*a%mod;    //判断b为奇数,等价于b%2==1

b>>=1;                  //b的二进制右移一位,等价于b/=2

a=a*a%mod;

}

return res;

}

7.2逆元

根据费马小定理,若a和p互素,那么ap-2和a互为逆元。逆元的作用是,模p意义下,除以p和乘以p的逆元是等价的。

求逆元直接调用快速幂即可:

long long inv(long long x,int mod){      //求x的逆元(模mod意义下)

return power(x,mod-2,mod);

}

以上两个模板mod可以写在全局变量里,这样函数就可以少一个参数。

有了逆元以后,组合数的模板就可以改写成这样:

long long

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法笔面试宝典 文章被收录于专栏

算法笔面试真题解析

全部评论

相关推荐

牛马人的牛马人生:500一天吗?香麻了
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务