数论总结

时间秒杀一切 提交于 2020-03-30 08:56:23

一:扩展欧拉定理的一种更简便的写法

void exgcd(int a,int b,int &d,int &x,int &y){
    if(b) exgcd(b, a % b, d, y, x), y -= x * (a / b);
    else x = 1, y = 0, d = a;
}

二:线性求逆元,若$a*i+b=p,a=\lfloor \frac{p}{i} \rfloor,b=p%i$则$\frac{1}{i}=-\frac{a}{b}$

inv[1] = 1;
for(int i=2; i<=n; i++)
    inv[i] = p - (p / i) * inv[p % i] % p;

 三:大步小步算法,求$a^x=b(mod p)$,令$k=\sqrt{p},0<c<=k,0<=d<k$,原式可转化为$a^{ck-d}=b$,即$a^{ck}=b*a^d$,用hash表保存每一个$b*a^d$,最后依次检验即可

时间复杂度$O(\sqrt{n})$

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!