美文网首页
组合数求解

组合数求解

作者: Fgban | 来源:发表于2020-02-01 13:03 被阅读0次

扩展欧几里得算法原理
求解逆元的方法(本文采用扩展欧几里得算法进行求解)
求组合数的两种方法
Lucas定理

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>


using namespace std;

// 扩展欧几里得算法求方程ax+by=gcd(a,b)的一个解
// 返回a,b的最大公约数 
int exGcd(int a, int b, int &x, int &y){
    if(b == 0){
        x = 1;
        y = 0;
        return a;
    }
    int g = exGcd(b, a % b, x, y);
    int temp = x;
    x = y;
    y = temp - a / b * y;
    return g;
}
//求解a模m的逆元的最小整数解 
int inverse(int a, int m){
    int x, y;
    int g = exGcd(a, m, x, y);
    return (x % m + m) % m;
}
//n中选m的组合数,对p取余的结果 
int Cal(int n, int m, int p){
    int res = 1;
    for(int i = 1; i <= m; i++){
        res = res * (n - m + i) % p;
        res = res * inverse(i, p) % p;
    }
    return res;
}
//Lucas定理求解组合数 
int Lucas(int n, int m, int p){
    if(m == 0)
        return 1;
    int C = Cal(n % p, m % p, p);
    return C * Lucas(n / p, m / p, p) % p;
} 

int main(){
    int n, m, p;
    while(scanf("%d%d%d", &n, &m, &p) != EOF){
        printf("%d\n", Lucas(n, m, p));
    }
    return 0;
}



相关文章

  • 组合数求解

    扩展欧几里得算法原理求解逆元的方法(本文采用扩展欧几里得算法进行求解)求组合数的两种方法Lucas定理

  • 补写西瓜经四十二章圆阵:第三节混元河洛大阵

    阵法:混元河洛阵。阵基:洛门,落日谷。 我们在洛门这一章用组合数学把洛门本源求解啦一下,用数学求解洛门本源的各个种...

  • 方程组与向量组

    向量组的线性相关性 线性表示问题 极大线性无关组 等价向量组 齐次线性方程组求解 非齐次线性方程组求解 秩的不等式...

  • CS229-DAY3:non-parametic learnin

    Loess:局部加权回归算法 用处:拟合数据求输出 让我们不用担心特征的选择,举个例子,下图中,如果要求解X对应的...

  • 非线性方程组求解

    非线性方程组求解 fsolve() 可以对非线性方程组进行求解,它的基本调用形式为fsolve(func,x0)。...

  • 使用Python+SymPy 求解线性方程组

    最近几天在复习线性代数,想用Python求解线性方程组,最开始想用SciPy,但是SciPy求解方程组好像要求系数...

  • 二元一次方程组求解

    二元一次方程组求解

  • Oracle 集合处理sql

    /根据一组坐标+半径+生成的坐标精度生成一组圆形集合数据/SELECT SDO_UTIL.CIRCLE_POLYG...

  • 线代--线性系统求解的应用---求解一个矩阵的逆

    一个矩阵的逆满足条件。进而,求解矩阵的逆可以基于这个约束建立方程组进行处理。如求矩阵的逆可以建立如下方程组进行求解...

  • 第2课 矩阵消元

    大纲 讨论方程组,然后求解 求解方式为消元法 回代 消元矩阵 消元法的奏效情况与无效情况 第一部分 例:方程组:矩...

网友评论

      本文标题:组合数求解

      本文链接:https://www.haomeiwen.com/subject/qeatxhtx.html