• 组合数学中的常见定理&组合数的计算&取模


    组合数的性质:

    C(n,m)=C(n,n-m);

    C(n,m)=n!/(m!(n-m)!);

    组合数性质

    组合数的递推公式:


    C(n,m)=  C(n-1,m-1)+C(n-1,m);

    组合数一般数值较大,题目会要求取模;而求组合数的过程中一般会用到除法,所以会涉及除法取模的知识;

    在除法取模的过程中,一般会求一个乘法逆元;

    乘法逆元的定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元;

    求乘法逆元的方法:

    (b/a)modp;(a|b)p为质数;

    1.欧拉定理或者费马小定理:

      费马小定理是欧拉定理的特殊情况;

      费马小定理的定义及证明:链接

        由得b/a=(b/a)*(ap-1modp)=b/a*ap-1modp=b*ap-2modp;

        除法就被消去了;

        而这样做还有一个问题就是p-2一般很大,(因为p一般都取1e9+7,NND,我记得有次BC的题是1e8+7直接把我坑惨了);这时就用快速幂求啦;

        附上快速幂的模板:

        

    ll fsat_pow(ll a,ll b)
    {
        ll s=1,base=a;
        while(b)
        {
            if(b&1)
            {
                s*=base;
                s%=mod;
            }
            base*=base;
            base%=mod;
            b=(b>>1);
        }
        return s;
    }

    2.扩展欧几里得算法:

    当n,m都很大不能一个一个数相乘得到时,这时就需要Lucas定理了;(有心情有时间再来写)

  • 相关阅读:
    c11---位运算相关
    c10---多文件开发
    C9---include,编译
    c8---递归
    c7---函数
    c6----函数的声明和实现
    c5
    Arm 环境上面libgdiplus的简单安装配置
    批量查找可执行文件目录的简单方法
    Android常用工具类
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5404459.html
Copyright © 2020-2023  润新知