zoukankan      html  css  js  c++  java
  • 数论初步

    https://zybuluo.com/ysner/note/1109102

    逆元求解

    费马小定理

    假如a是一个整数,b是一个素数,(gcd(a,p)=1),则
    (a^{p-1}equiv1(mod(p)))
    应用:

    • 降次:(a^bmod(p)=a^{(b)mod (p)}mod(p))
    • 质数逆元:(frac{1}{a}mod (p)=a^(p-2)mod(p))

    欧拉定理

    (n,a)为正整数,且(n,a)互质,则
    (a^{phi(n)}equiv 1(mod(n)))
    费马小定理是欧拉定理的特殊情况,因为(n)为素数时,(phi(n)=n-1)
    拓欧降次:

    • (n>1)时,(a^b\%n=a^{b\%phi(n)}\%n)
    • (bleqphi(n))时,暴算
    • (b>phi(n))时,(a^b\%n=a^{b\%phi(n)}\%n)
      拓欧解方程
    • 求解(aequiv 1(mod(q)),x>0)
      则x解集为(phi(q))的约数与倍数。

    实践

    给定(a,p(p>1),gcd(a,p)=1),求(a)在模(p)意义下的逆元。

    • 用Exgcd解方程(axequiv 1(mod(p)))
      (ax+by=1)
    int exgcd(int a,int b,int &d,int &x,int &y)
    {
        if(!b) x=1,y=0,d=a;
        else exgcd(b,a%b,d,y,x),y-=x*(a/b);
    }
    {
      re int a;
      exgcd(i,p,g,x,y);
      while(x<0)    x+=p;
      printf("%d
    ",x);
    }
    
    • 利用欧拉定理(a^{phi(n)}equiv1(mod(n)))
      有式(a^{-1}equiv a^{phi(n)-1}(mod(n)))
    • n为质数时,费马小定理
      (a^{-1}equiv a^{n-2}(mod(n)))
    • 线性求解
      (inv[i]=(p-p/i)*inv[p\%i])

    矩阵乘法

    struct matrix{
        int a[100][100];
        matrix()
        {
          memset(a,0,sizeof(a));
        }
        int * operator [](int x)
        {
            return a[x];
        }
        matrix operator *(matrix b)
        {
            matrix c;
            for(int i=0;i<l;i++)
            for(int j=0;j<l;j++)
            for(int k=0;k<l;k++)
            c[i][k]=(c[i][k]+1ll*a[i][j]*b[j][k])%w;
            return c;
        }
    }S,T;
    

    高斯消元

    [专题总结][1]

    组合数学

    不可重组合数学(留坑)

    • (C^n_m)表示在(m)中选(n)个的方案数。(把(m)个无区别物品放到(n)个有区别篮子的方案数)
      (C^m_n=frac{n!}{m!(n-m)!})
      (C^m_n=C_{n-1}^{m-1}+C^m_{n-1})
      (C^k_n=C^{n-k}_n)
      (C^{k+1}_n=C^k_n*frac{n-k}{k+1})

    [(a+b)^n=sum^n_{k=0}C_n^k a^{n-k} b^k ]

    • (P^n_m)表示在(m)中选(n)个的排列数。(把(m)个有区别物品放到(n)个有区别篮子的方案数)
      (P_m^n=C_m^n*n!)
    • (S^n_m)表示斯特林数。(把(m)个有区别物品放到(n)个无区别篮子,且篮子不空的方案数)
      (S_m^n=S_m^{n-1}*m+S_{m-1}^{n-1})
      (S_m^n=0(m>n))

    可重组合数学

    可重排列

    (k)个元素,其中第(i)个元素有(n_i)个,求全排列数。
    (P'=frac{(sum_{i=1}^k n_i)!}{n_i!n_2!...n_k!})
    即先全排列,然后给每个元素编号。

    可重组合

    (k)个元素,每个元素可选无穷多个,一共选(k)个,求方案数。
    (C'=C_{k-n+1}^{n-1}=C_{k-n+1}^k)
    假如第(i)个元素选(x_i)个,那么原问题变为(x_1+x_2+...+x_n=k)
    (y_i=x_i+1),那么(y_1+y_2+y_3+...+y_n=k+n)
    此时(y>0),即每个元素都要选。所以等于在(k+n)个元素((k+n-1)个空位)间放(n-1)个隔板。

    卡特兰数

    前几个数:(1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 1767263190)
    好像我只会用它打表找规律
    公式:
    (C'[n]=frac{C_{2n}^n}{n+1})
    (C'[n]=sum_{i=1}^{n-1} C'^iC'^{n-i})
    应用:

    • 一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?
    • n个节点构成的二叉树,共有多少种情形?
    • 求一个凸多边形区域划分成三角形区域的方法数?
    • 在圆上选择2n个点,将这些点成对链接起来使得所得到的n条线段不相交,一共有多少种方法?
    • n*n的方格地图中,从一个角到另外一个角,不跨越对角线的路径数.
    • n层的阶梯切割为n个矩形的切法数。
      [1]: http://www.cnblogs.com/yanshannan/p/8805546.html
  • 相关阅读:
    安卓 如何载入一个新窗口如何关闭窗口和向另一个窗口传值
    大数相加算法
    JsonTools
    数组、链表、哈希表
    JavaScript, JQuery事件委托
    前端移动端的适配
    JavaScript设置和获取cookie
    WCF、WebAPI、WebService之间的区别
    npm设置成淘宝镜像
    JQuery中 text()、html() 以及 val()以及innerText、innerHTML和value
  • 原文地址:https://www.cnblogs.com/yanshannan/p/8806665.html
Copyright © 2011-2022 走看看