加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 计算多项系数

发布时间:2020-12-16 09:51:33 所属栏目:百科 来源:网络整理
导读:我想计算多项式系数mod 1e9 7.它等于:n! /(k0!* k1!* k2 * … * km!) 在我的情况下m = 3,k0 k1 k2 = n,所以它将是:n! /(k0!* k1!* k2!)我的代码: ....long long k2 = n - k1 - k0;long long dans = fact[n] % MOD;long long tmp = fact[i] % MOD;
我想计算多项式系数mod 1e9 7.它等于:n! /(k0!* k1!* k2 * … * km!)

在我的情况下m = 3,k0 k1 k2 = n,所以它将是:n! /(k0!* k1!* k2!)我的代码:

....
long long k2 = n - k1 - k0;
long long dans = fact[n] % MOD;
long long tmp = fact[i] % MOD;
tmp = (tmp * fact[j]) % MOD;
tmp = (tpm * fact[k]) % MOD;
res = (fact[n] / tmp) % MOD; // mb mistake is here...
cout << res;

事实[i] – i mod 1e9的阶乘7
它不适用于大型测试

解决方法

我希望我不是在这里联系,但这是一个工作过程,以解决你的问题:

>天真的实现总是会遇到溢出错误.您必须准备好利用多项式系数的某些数学属性来达到稳健的解决方案. Dave Barber在他的library中使用了递归属性(例如4个数字 – 当所有分支被零替换时递归停止)

multi (a,b,c,d) = multi (a ? 1,d) + multi (a,b ? 1,c ? 1,d ? 1)

>基于以上所述,DavidSerranoMartínez展示了如何提供提供溢出控制的implementation.他的代码可以像使用一样轻松

unsigned long long result_2 = multinomial::multi<unsigned long long>({9,8,4});

>第三种选择是使用(或学习)专用于组合的库,如SUBSET.由于依赖性和长度,这是一个更难阅读的代码,但是调用就像

int factors[4] = {1,2,3,4};
Maths::Combinatorics::Arithmetic::multinomial(4,factors)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读