算法刷题应用知识补充---数论

快速幂求a^k%p

在这里插入图片描述

主要用到a的k次方,可以用多个a的(2的某次)次方的乘积来表示,只需要看次方k的二进制哪些位是1,就相应的乘上该循环步的a

知识点1:要注意如果数的范围很大,那么每两个数相乘,就要将第一个数转为LL,且在最后取模
知识点2:循环条件是k不为0,因为每次处理完之后,k都会去除一位二进制位

快速幂求逆元

在这里插入图片描述
在这里插入图片描述

知识点1:适用条件:当模为质数时,才可以使用快速幂求逆元。
知识点2:a在mod p时的逆元,等于 qmi(a, p - 2, p),即a * qmi(a,p - 2, p) = 1 (mod p)
知识点3:要判断是否有解,若a%p!=0,则有解,否则,无解

扩展欧几里得求逆元

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

知识点1:与快速幂求逆元相对应,他对模没有要求,所以,当模不是质数时,可以使用扩展欧几里得算法求逆元
知识点2:首先是对gcd算法的展开以及扩展
知识点3:该算法可以求线性同余方程,ax在mod m的情况下,余数是b。可以求出x
他的具体算法过程见“算法一栏”
这里的应用是,将a,m,x,y带入exgcd,得到函数的返回值是gcd(a, m),且x和y会引用返回,其中,x就是我们要找的值的初态,我们还要对其处理。
这里要判断,是否真正要得到的余数b是gcd(a,m)的倍数,如果不是,那么无解,如果是,则结果是x乘上倍数,即x * (b / d),这就是我们要找的x

据此,如果将b换成1,那么就变成了ax在mod m的情况下,余数是1,即x是a在mod m下的逆元

排列组合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

求Cab,使用其阶乘公式,Cab = a!/b!*(a - b)!

知识点1:求阶乘:预处理所有的数的阶乘,以及逆元阶乘,首先初始化fact[0] = infact[0] = 1
之后 i 从1到N,每个fact[i] = fact[i - 1] * i 最后% p
infact[i] = infact[i - 1] * qmi(i, p - 2, p) 最后 % p
然后加个快速幂算法即可

知识点2:从这里我们也可以看出,如果单纯求阶乘,则fact[0] = 1,之后 i 从1到N,每个fact[i] = fact[i - 1] * i

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值