zoukankan      html  css  js  c++  java
  • 「学习笔记」联赛数论再学习

    原来联赛是考数论的...

    好像很多甚至是全部没有给证明,因为大部分我找到的能看懂的证明都觉得证的不大对,有的是证了充分没有证必要,有的是太过冗余不适合整理。


    一些定义和结论

    剩余类:记模 (m)(r)(rin [0,m)))的自然数组成的集合为 (k_r),则 (k_r) 为模 (m) 的一个剩余类,任意 (amod m=r),称 (a)(k_r) 的一个代表元。

    完系:在每个 (k_r) 中任取一个代表元为模 (m) 的一个完系。

    缩系/简化剩余系:对于每一个与 (m) 互质的 (r),在 (k_r) 中任取一个代表元为模 (m) 的一个缩系。若 (xperp m),则将 (m) 的一个缩系中每个数都乘 (x) 后,仍然为 (m) 的一个缩系。

    裴蜀定理(ax+by=c,xin mathbb{Z}^*,yin mathbb{Z}^*) 有整数解的充要条件是 (gcd (a,b)|c)

    费马小定理:若 (gcd(a,m)=1),则 (a^{m-1}equiv 1pmod m)

    欧拉定理:若 (gcd(a,m)=1),则 (a^{varphi(m)}equiv 1pmod m)

    扩展欧拉定理(a^{b}equiv a^{b mod varphi(m)+varphi(m)}pmod m)

    Lucas 定理

    [inom{n}{m}=inom{left lfloor n/p ight floor }{left lfloor m/p ight floor }inom{nmod p}{mmod p}pmod p ]

    欧几里得算法(辗转相除法)

    [gcd(a,b)=gcd(b,amod b) (b eq 0) \ gcd(a,0)=a ]

    Stein算法

    (a,b) 均为偶数时:(gcd(a,b)=2gcd(a/2,b/2))

    (a) 为偶数,(b) 为奇数时:(gcd(a,b)=gcd(a/2,b))

    (a) 为奇数,(b) 为偶数时:(gcd(a,b)=gcd(a-b,b)).((a>b)

    扩展欧几里得算法(exgcd)

    求解下面这个不定方程:

    [ax+by=c ]

    利用裴蜀定理判断有无解,若有解必有 (gcd(a,b)|c)

    先求解 (ax+by=gcd(a,b))

    把后面的 (gcd(a,b)) 辗转相除一下再写成类似的形式(这里的 (x',y') 是对应 (gcd(b,amod b))(x,y),和上面的 (x,y) 没有关系):

    [ax+by=gcd(a,b)=gcd(b,amod b)=bx'+(a-leftlfloorfrac{a}{b} ight floor b)y' \ ax+by=bx'+(a-leftlfloorfrac{a}{b} ight floor b)y' ]

    因为要求解 (x,y),所以假设我们已经求解了 (x',y'),则要按 (a,b) 把两个方程分开。

    [ax+by=ay'+b(x'-leftlfloor frac{a}{b} ight floor y') ]

    递归求解得到 (x',y') 后,对比系数可得 (x=y',y=(x'-leftlfloor frac{a}{b} ight floor y'))

    这样递归就能求出 (ax+by=gcd(a,b)) 一组特解了,最后当 (b=0) 的时候递归终止,此时 (ax+by=gcd(a,b)) 的解是 (x=1,y=0)

    void exgcd(int a, int b, int &x, int &y) {
    	if(!b) { x = 1, y = 0; return ; }
    	exgcd(b, a % b, x, y);
    	int nx = y, ny = x - (a / b) * y;
    	x = nx, y = ny;
    }
    

    (d=gcd(a,b))

    求出 (ax+by=d) 的一组特解 (ax_0+by_0=d),则有 (afrac{x_0c}{d}+bfrac{y_0c}{d}=c),记作 (ax_1+by_1=c)

    其通解为 (a(x_1+kfrac{b}{gcd(a,b)})+b(y_1-kfrac{a}{gcd(a,b)}))

    充分性显然,这个必要性先不证了因为我不会

    扩展中国剩余定理

    合并两个一元线性同余方程:

    [left{egin{matrix} xequiv a_1pmod {m_1} \ xequiv a_2pmod{m_2} end{matrix} ight. ]

    (a_1+k_1m_1=a_2+k_2m_2),整理得 (k_1m_1-k_2m_2=a_2-a_1),用裴蜀定理判断有无解,否则 exgcd 求出一组解 ((p,q)),则原来两个方程可以合并成 (xequiv a_1+m_1ppmod {mathrm{lcm}(m_1,m_2)}),这样子合并为什么是最优的,就先不证了因为我不会

    为了防止爆精度,exgcd 求解出的使用最小非负整数解。

  • 相关阅读:
    双网卡绑定一个IP--bond
    查看window系统电脑连接过的wifi密码
    python字符串
    三级菜单
    购物车
    登录接口
    Python 基础之在ubuntu系统下安装双版本python
    SSH连接linux时,长时间不操作就断开的解决方案
    python中变量None的
    查找文件工具find
  • 原文地址:https://www.cnblogs.com/do-while-true/p/15374136.html
Copyright © 2011-2022 走看看