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 求解出的使用最小非负整数解。

  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/do-while-true/p/15374136.html
Copyright © 2011-2022 走看看