0
点赞
收藏
分享

微信扫一扫

Django ORM 中过滤 JSON 数据

曾宝月 2024-07-24 阅读 28

我们知道,计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现,但是当数很大时求阶乘很容易溢出,所以这里给出非阶乘的方式求排列组合

求排列

分母和分子可以抵消,最后代码如下 

unsigned long long A(int n, int m) {
    unsigned long long result = 1;
    for (int i = 0; i < m; i++) {
        result *= (n - i);
    }
    return result;
}

求组合

unsigned long long C(int n, int m) {
    if(m > n - m){ //因为C(n,m)=C(n,n-m),可以简化
        m = n - m;
    }
    unsigned long long result = 1;
    for (int i = 0;i < m; i++){
        result *= (n-i);    //将result乘(n-i),计算分子部分,即n*(n-1)*...* (n-m+1)
        result /= (i+1);    //将result除以(i+1),计算分母部分,即m!
    }
    return result;
}

由于结果肯定是非负数,所以可以用unsigned long long数据类型,能表示0~2^64-1,范围比较大

举报

相关推荐

0 条评论