基础数论总结

虽然数论很辣鸡,也没刷什么题,但还是做一个小小的总结吧!


EXGCD

这个版块其实没有专门去打题,感觉对于题目来说就是要抽象出对应的ax+by=c这样的方程吧!(目前还没有遇到什么特别奇特的题目)


逆元

求逆元其实有不同的方法,详细参见


 中国剩余定理

中国剩余定理主要是起一个工具的作用吧!对于扩展类的算法,起了一个合并的作用(多少把不是质数的模数拆为几个质数相乘)

但在代码实现还是要具体说一下,有一篇博客解释的很详细

基础数论总结_第1张图片

那么代码其实就很简洁了,并没有我的那篇博客里写的那么复杂

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。

poj1845

对约数的掌握和龟速乘



个人觉得数论就是中国剩余定理合并,欧拉定理的那个指数取模比较常见吧!

对于素数的问题也是很经典和常见,那些考过的题也可以拿出来复习复习。

更多的就是数学思想了,要看题(糟了,没怎么写题,不喜欢写题可不是好事)

嗯,多多积累吧!

 

转载于:https://www.cnblogs.com/yyys-/p/11311860.html

你可能感兴趣的:(基础数论总结)