虽然数论很辣鸡,也没刷什么题,但还是做一个小小的总结吧!
EXGCD
这个版块其实没有专门去打题,感觉对于题目来说就是要抽象出对应的ax+by=c这样的方程吧!(目前还没有遇到什么特别奇特的题目)
逆元
求逆元其实有不同的方法,详细参见
中国剩余定理
中国剩余定理主要是起一个工具的作用吧!对于扩展类的算法,起了一个合并的作用(多少把不是质数的模数拆为几个质数相乘)
但在代码实现还是要具体说一下,有一篇博客解释的很详细
那么代码其实就很简洁了,并没有我的那篇博客里写的那么复杂
LL CRT(LL a,LL p,LL x)//x是当前拆出的质数 { return inv(p/x,x)*(p/x)%p*a%p; }
而如果是模板题思想的话,就拆成这样的形式:
然后套板子就行
欧拉定理
见这篇
但其实真正用到很多的性质其实是这个
当指数很大时就用到这个性质。
费马小定理其实就是欧拉定理的一个特殊情况罢了(模数是质数)
Lucas
用于组合数取模(且要求p不能太大)
基础见这篇
然后是扩展Lucas
BSGS
A,C互质就BSGS,不互质就exBSGS(如果x太大可以考虑一下能不能使用欧拉定理)
见这篇
快速幂与龟速乘
快速幂没有什么好说的了
ll quick(ll t,ll x,ll mod) { ll ans=1; while(x) { if(x&1) ans=ans*t%mod; t=t*t%mod; x=x>>1; } return ans%mod; }
龟速乘防止爆long long
见这篇
线性筛
当然不只是用来筛素数,还可以预处理积性函数
整除分块
其实就是一个小技巧而已
至于莫比乌斯反演和杜教筛,因为这篇是总结基础数论,所以就先不写,至于FFT,NTT,斯特林数那些我还真没懂。。。
那么就再放两道我认为还不错的题吧!(我好像没怎么做题,才两道)
可以在写exLucas前先写一下,比较两种做法,有助于理解exLucas。
对约数的掌握和龟速乘
个人觉得数论就是中国剩余定理合并,欧拉定理的那个指数取模比较常见吧!
对于素数的问题也是很经典和常见,那些考过的题也可以拿出来复习复习。
更多的就是数学思想了,要看题(糟了,没怎么写题,不喜欢写题可不是好事)
嗯,多多积累吧!