模意义下的组合数

模意义下的组合数

求\(C_{n}^{k}\%p\)(p为质数)

\[C_{n}^{k}=\frac{n!}{k!(n-k)!}\]

设\(n!=a_1p^{e_1}, k!=a_2p^{e_2}, (n-k)!=a_3p^{e_3}\)

如果\(e_1-(e_2+e_3)>0\),则\(C_{n}^{k}\%p=0\)

否则\(C_{n}^{k}\%p=\frac{a_1}{a_2a_3}\%p=a_1(a_2a_3)^{(p-2)}\%p\)(费马小定理)

LL mod_fact(LL n, LL p, LL &e)
{
    if (n<=1) return 1;
    LL ret=mod_fact(n/p, p, e);
    e+=n/p;
    if ((n/p) & 1) return ret*(fact[n%p]*(p-1)%p)%p;
    else return ret*fact[n%p]%p;
    /* (p-1)!=-1(mod p) */
}
LL calc_C(LL n, LL k, LL p)
{
    LL e1=0, e2=0, e3=0;
    LL a1=mod_fact(n, p, e1);
    LL a2=mod_fact(k, p, e2);
    LL a3=mod_fact(n-k, p, e3);
    if (e1-(e2+e3)>0) return 0;
    return (a1*POW(a2*a3%p, p-2, p)%p);
}

原文地址:https://www.cnblogs.com/GerynOhenz/p/8506859.html

时间: 2024-08-20 10:02:35

模意义下的组合数的相关文章

不超过 $10^{18}$ 的非负整数在模意义下的乘法

约定:在博主的校内 OJ 上, long double  类型支持阶码 $15$ 位.有效值 $63$ 位(即科学记数法保留 $64$ 位有效数字).以下讨论以此为前提. 设非负整数 $a, b, p$ 满足 $a, b<p<2^{63},\ p \ne 0,$ 求 $ab \bmod p.$ $$ab \bmod p=ab-p\left\lfloor {ab \over p} \right\rfloor$$ 我们知道 $\left\lfloor {ab \over p} \right\rfl

hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】

题目链接 首先利用组合数学知识,枚举两人的总胜场数容易得到 这还不是卷积的形式,直接搞的话复杂度大概是O(n^2)的,肯定会TLE.但似乎和卷积有点像?想半天没想出来..多谢Q巨提醒,才知道可以用下面这个公式进行转化 最后,化得的公式为 另外注意,上式右边是一个卷积的形式,但是,所得和的第一项是不需要加上的(不过图中公式没有体现).结合实际意义大概就是,i==0&&j==0时,gcd(i,j)不存在约数d,虽然0可以被任意正整数整除 & 第一项不为0 #include<bit

幂方程(模意义下)

问题 求解 $$x^a\equiv b(mod \ p)$$ 其中 $p$ 为质数 分析 由于 $p$ 为质数,肯定存在原根 $g$. 由原根的定义知 $x$ 可表示成 $x=g^c$,问题转化为 $(g^c)^a \equiv b(mod \ p)$,得到 $$(g^a)^c \equiv b(mod \ p)$$ 于是就转换成我们熟悉的BSGS模型了,可以在 $O(\sqrt p logp)$ 解出 $c$. 这样得到原方程的一个特解 $x_0 \equiv g^c(mod \ p)$.显然

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

求解轨道力学二体意义下的Lambert方程(兰伯特方程)的Matlab程序

轨道力学中二体问题下求解兰伯特方程需要解决一个迭代问题. 这是一个老外写的,有很多注释,相信大家应该能看懂,经实际检测,切实可用 function [v1,v2]=solve_lambert(r1,r2,t,GM,lw,N,branch) %This routine implements a new algorithm that solves Lambert's problem. The %algorithm has two major characteristics that makes it

组合数取模(转载)

本文转自:http://blog.csdn.net/skywalkert/article/details/52553048 0. 写在前面 在程序设计中,可能会碰到多种类型的计数问题,其中不少涉及到组合数的计算,所以笔者写下这么一篇文章,期望能解决一些常规的组合数求模问题.以下部分内容改编自AekdyCoin的<组合数求模>,而且为了感谢他对(懵懂的)笔者的启发,这篇文章的标题与其文章相同.另外,感谢Picks将多项式运算的技巧在中国进行推广,感谢51nod提供了许多有趣的数论题目,感谢fot

8.23&lt;1&gt;题解

T1 考场上全程盯着PDF,不知道OJ上有样例解释?最后题都没读懂,看到OJ上的样例解释之后恍然大悟,然后就过了,我×××××,下次我一定PDF和OJ题面都认真阅读 读懂题之后其实很简单,给序列排序,去重,然后在排好序的数组中寻找原序列前一位和后一位,看是否满足条件就可以了 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdio> 4 #define int long long 5 #define max

51nod 1172 Partial Sums V2 任意模FFT

Partial Sums V2 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1172 Description 给出一个数组A,经过一次处理,生成一个 数组S,数组S中的每个值相当于数组A的累加,比如:A = {1 3 5 6} => S = {1 4 9 15}.如果对生成的数组S再进行一次累加操作,{1 4 9 15} => {1 5 14 29},现在给出数组A,问进行K次操作后的结果.(输出结果

POJ.2065.SETI(高斯消元 模线性方程组)

题目链接 http://blog.csdn.net/Clove_unique/article/details/54381675 http://blog.csdn.net/u013081425/article/details/24299047 http://blog.csdn.net/lin375691011/article/details/38406737 https://www.cnblogs.com/IMGavin/p/5933037.html /* 模意义下的高斯消元,在初等行变换时把k=