数论相关算法

数论相关算法

素数的分布

$[1,n]$有$\frac n {\ln n}$个素数

$\sum \frac 1 p_i = O(\log\log n)$(埃式筛复杂度)

GCD

$gcd(a,b) = gcd(a-b,b) = gcd(b,a\%b)$

$gcd(a,b)lcm(a,b) = ab$

类欧几里得问题

$\displaystyle \sum_{x=1}^n \lfloor \frac{ax+b}{c}\rfloor$

$a,b,c,n \leq 10^9$

实质上是$y=\frac{ax+b}{c}$下的整点个数,$a$如果小于0其实是可以$+c$的

其实我们可以默认$a < c$否则可以$a \%=c$

现在就是求一个梯形里面的整点个数。剩下的三角形就可以旋转一下坐标系,然后就变成了一个小三角形的整点个数然后问题又变成了一个$a \geq c$的问题又可以递归了。

裴蜀定理

$ax+by=c$有解当且仅当$(a,b) | c$

就是在$gcd$的过程中记录一下就好了。

素数

素性测试

  • 暴力,$O(\sqrt n)$

  • 欧拉定理,如果$(a,m)=1$$a^{\varphi(m)} \equiv m \quad(\bmod m)$

    否则,$a^{b} \equiv a^{\min (b, b \bmod \varphi(m)+\varphi(m))}(\bmod m)$

  • 经典例题$2^{2^{2^{…}}} \bmod p$

    其实就是一直用下面那个%,%到1为止。这样做答案就是$\varphi(x)$一直进行下去,复杂度大概是$\log$

  • Miller Rabin

    • Farmat 判别法

      $a^{p-1} \equiv 1 \pmod p$,所以我们每次随机一个整数$a$康康$a^{p-1}$是否等于1,如果不是说明肯定不是素数。

      这样的正确率是$50\%$以上的,但是有例如 561 这种没有反例存在。

      我们在求$a^{p-1}$时,让$p-1 = 2^{k}\times t$所以我们先求出$a^t$,倍增的时候,我们知道$x^2\equiv 1 \pmod p$等价于$x\equiv \pm 1 \pmod p$如果$p$是质数 。所以我们往上平方的时候看看是否等于1,如果等于1就看看上次是不是$\pm1$

  • Pollard-Rho

    给定一个合数,怎么快速分解?

    给定一个合数$n$,希望找出一个它的非平凡因子

    由于生日悖论,每次在$[1,n]$随机,$O(\sqrt n )$次就大概率有两个数字相同。

    我们拿出一个随机数列,$x_i = F(x_{i-1})$在$O(\sqrt n)$步就会产生一个$\rho$形的循环。

    注意在$n$的最小因子$p$的意义下,只有$O(\sqrt p)$步。

    我们考虑有两个变量,一个每次走一步,一个每次走两步,令$t$是。$\rho$尾巴的长度,$l$是环长,于是我们肯定可以在$O(t+l)$时间找到循环节。如果$2a - a$是环长$l$的倍数,并且都进入了环,那么必然重合。进入环前走了$t$步,进入环最多走了$l$步,于是是$O(t+l)$

    总复杂度是$O(n^{\frac 1 4} polylog)$。我们平时用的$F(x) = x^2+c$,$c$随机,这种复杂度还没有证明。

  • 筛素数

  • 假设$p_m$是 mth 质数,$f(n,m)$表示$\leq n$的不含$p_1…p_m$作为因子的数,那么不难发现

    $f(n,m) = f(n,m-1) - f(\lfloor\frac n {p_m} \rfloor ,m-1 )$

    如果有$p_m^2 > n$那么$f(\lfloor \frac n {p_m} \rfloor ,m-1) = 1$

    所以这个东西的复杂度是$O(n^{3/4})$可能还得除以 Log

    想法类似 Min25

  • 线性同余方程组

    $m_i$互质,$M = \prod m_i , M_i = \frac M {m_i},M_i^{-1}$是$M_i$膜$m$逆元

    $x \equiv \sum_{i=1}^{n} x_{i} M_{i} M_{i}^{-1} \pmod M$

    不互质考虑增量法,每次把两个方程合并成一个大方程

    $x \equiv a \pmod b,x\equiv c \pmod d$

    那么$bt + a \equiv c\pmod d$

    exgcd 解得$t \equiv t_0 \pmod {\frac{d}{(b,d)}}$

    带回$x\equiv x_0 \pmod {[b,d]}$

    一次合并复杂度$O(\log)$

  • 如果$(a,m) = 1$记$x$最小正整数使得$a^x\equiv 1 \pmod m$则称 $x$是$a$ 膜$m$的阶

  • 原根

    有原根的数$1,2,4,p^a,2p^a$

  • 离散对数

    若$g^x \equiv k \pmod p$则$\log_g k \equiv x \pmod p$

    而且往往会让$g$为一个$\mod p$的原根

  • BSGS

    设一个参数$l$,将$a^{0…l-1}$存到 hash table 里面。然后我们枚举$k \leq \frac {\varphi(m)-1} l$

    每次查询 hash table 里面有没有$j$满许$a^{kl+j} \equiv b \pmod m$

    复杂度$O(\sqrt {\varphi(m)})$

  • exBSGS

    掉线

  • Lucas

    $\binom n m \equiv \binom {n}{}$

  • Min25 \sum f(i) = 1 + \sum_{p\in prime} \sum_{x最小只质因子为p}$
文章作者: yijan
文章链接: https://yijan.co/old31/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yijan's Blog