• [笔记] 基础数论


    费马小定理:

    \(a,p\in \mathbb{Z}\)\(p\) 为质数,且 \(a\not\equiv 0\pmod{p}\) 时有:\(a^{p-1}\equiv 1\pmod{p}\)

    所以 \(a^b\equiv a^{b\bmod (p-1)}\pmod p\)

    欧拉定理:

    \(a,m\in \mathbb{Z}\),且 \(\gcd(a,m)=1\) 时有: \(a^{\varphi(m)}\equiv 1\pmod{m}\)

    这里 \(\varphi(x)\) 是数论中的欧拉函数。

    所以 \(a^b\equiv a^{b\bmod \varphi(m)}\pmod m\)

    扩展欧拉定理:

    \(a,m\in \mathbb{Z}\) 时有:
    \(a^b\equiv\left\{\begin{matrix}a^b&,b<\varphi(m)\\a^{b\bmod\varphi(m)+\varphi(m)}&,b\ge\varphi(m)\end{matrix}\right.\pmod m\)

    Gcd

    LL Gcd(LL x, LL y){ LL t; while(y) t = x, x = y, y = t % y; return x; }
    

    Exgcd

    对于 \(ax+by=c\) 这个式子,求出 \(x,y\).

    现推比较简单:

    \[\begin{aligned} &bx'+(a\bmod b)y'=c\\ &bx'+(a-a / b\cdot b)y'=c\\ &ay'+b(x'-a/b\cdot y')=c\\ \\ &故\ x = y',\ y = x'-a/b\cdot y' \end{aligned} \]

    void Exgcd(LL a, LL b, LL &x, LL &y){
    	if(!b){ x = 1, y = 0; return; }
    	Exgcd(b, a % b, x, y);
    	LL t = x; x = y, y = t - a / b * y;
    }
    

    注意事项

    • \(\gcd(a,b)\nmid c\),则无解。
    • \(a,b,c\) 的正负无所谓,但是注意不要不要求出来是 \(ax+by=-c\)
    • 函数调用求出来是 \(ax+by=\gcd(a,b)\).

    CRT

    咕咕咕

    ExCRT

    个人认为比 CRT 更加好理解和记忆。

    假设有 \(n\) 个同余方程:

    \[x\equiv b_1\pmod{p_1}\\ x\equiv b_2\pmod{p_2}\\ \cdots\\ x\equiv b_n\pmod{p_n}\\ \]

    可以直接使用 Exgcd 将这些同余方程合并:

    \[b_1+k_1p_1=b_2+k_2p_2\pmod{\rm{lcm}(p1,p2)} \]

    根据这一点,用 Exgcd 求出 \(k_1,k_2\) 即可将方程合并。

    Lucas

    用于模数为质数,但是较小的时候,求组合数:

    \[\binom{n}{m}=\binom{n/p}{m/p}\binom{n\%p}{m\%p} \]

    当模数不是质数时,如果分解质因数,每个质因数的次数都为 \(1\),那么分开做,再用 CRT 合并即可。

    否则要用到 ExLucas。

    ExLucas

    咕咕咕

  • 相关阅读:
    Http异常状态码解决方案。
    integer 面试题。
    int转换为String,常用的四种方法。
    Implicit super constructor Array() is undefined for default constructor. Must define an explicit constructor
    Eclipse的常用设置。
    构造方法详解。
    this关键字。
    面向对象--构造方法知识点。
    生成1-100之间的随机数。
    redis回顾
  • 原文地址:https://www.cnblogs.com/IrisT/p/15844541.html
Copyright © 2020-2023  润新知