组合数模板 - Lucas】的更多相关文章

2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace std; typedef long long ll; //a^b%m 快速幂 int quick_power_mod(int a, int b, int m) { ; int base = a; ) { == )//如果b是奇数 { result = (result * base) % m; } base =…
Lucas定理:A.B是非负整数,p是质数.A B写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]. 则组合数C(A,B)与C(a[n],b[n])C(a[n-1],b[n-1])…*C(a[0],b[0]) mod p同余 即:Lucas(n,m,p)=C(n%p,m%p)*Lucas(n/p,m/p,p) ll fact[maxn], a[maxn], inv[maxn]; //fact为阶乘 void init() { a[0] = a[1] = 1; f…
题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times C_{n\%p}^{m\%p} (\%p)\) 我们仔细观察这个定理,就可以发现一个事实:LUCAS定理本质上是在对n,m两个数做K进制下的数位分离 所以说,LUCAS定理我们可以这样表示: \(C_n^m \equiv \prod C_{a_i}^{b_i}\) (ai与bi为K进制拆分后的两个…
卢卡斯定理是一个与组合数有关的数论定理,在算法竞赛中用于求组合数对某质数的模. 第一部分是博主的个人理解,第二部分为 Pecco 学长的介绍 第一部分 一般情况下,我们计算大组合数取模问题是用递推公式进行计算的: \[C_n^m=(C_{n-1}^m+C_{n-1}^{m-1}) mod\ p \] 其中p相对较小的素数.但是当n和m过大时,计算的耗费就急剧增加\(O(mn)\),在实践中不适用.当这时候就需要Lucas定理进行快速运算: \[C_n^m=\prod_{i=0}^{k}C_{n_…
最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 . 要解决这个问题首先需要Lucas定理 或者 C!解法. Lucas定理: 我们令n=sp+q , m=tp+r . q , r ≤ p 那么,然后你只要继续对调用Lucas定理即可. 代码可以递归的去完成这个过程,其中递归终点为t = 0 : 伪代码,时间O(logp(n)*p): int L…
<题目链接> 题目大意: 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了答案.但他仍不满足,想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B). 现在要问问你,满足要求的方案数是多少. Input 第一行一个正整数T,表示数据组数. 对于每组数据:一行,两个正整数N…
题目链接 题目大意,N颗树上取不超过M个果子,求总方案个数模P的值,P是质数且不超过10w,N,M不超过1e9: 在这里树是被认为不同的,也就是将k(0<=k<=M)个小球放入N个不同的盒子的方案个数,这是一个经典的问题--> <   n个相同球放入m个不同盒,盒子可空,方案数C(n+m-1,m-1)  > 所以答案就是求 SUM{C(N+i-1,i) | 0<=i<=M},这个式子可以利用 C(n,k)=C(n-1,k)+C(n-1,k-1)来化简,因为第一项C…
题面 传送门 题解 果然--扩展\(Lucas\)学了跟没学一样-- 我们先考虑\(a=b\)的情况,这种情况下每一个\(A\)胜的方案中\(A\)和\(B\)的所有位上一起取反一定是一个\(A\)败的方案,而平局的方案取反之后仍然是一个平局的方案.那么我们可以用总的方案数\(2^{a+b}\)减去平局的次数除以\(2\)就行了.平局的次数我们可以考虑枚举两边扔了多少次正面,那么答案就是 \[ans=\sum_{i=0}^n {n\choose i}^2={2n\choose n}\] 可以这么…
Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p}^{m/p}\) 若把\(n,m\)在p进制下分解,那么就是\(\prod C_{n[i]}^{m[i]}\). 对于\(∈[l,r]\)的限制先容斥为\(<=r\). 考虑从低位到高位的数位dp,设\(f[i][S][j]\)表示做了前i位,S[i]第i个数选的数是<=还是>,进了j位,的…
void extend_gcd(ll a,ll &x,ll b,ll &y){ ){ x=,y=; return; } ll x1,y1; extend_gcd(b,x1,a%b,y1); x=y1; y=x1-(a/b)*y1; } ll inv(ll a,ll m){ ll t1,t2; extend_gcd(a,t1,m,t2); return ( t1%m + m ) % m; } ll qpow(ll x,ll y,ll m){ ; ll ans=qpow(x,y>>…
题意:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1805 题解: 根据cayley公式,无向图的每一个生成树就对应一个序列(共有n^(n-2)个),具体定义见 http://www.matrix67.com/blog/archives/682 根据定义,这个n-2项中没有出现的点为叶子结点,所以我们先求C(n,m)表示那些点为叶子,再乘上序列的数量 S(n,m) = C(m,0)m^n - C(m,1)(m-1)^…
题目链接:http://abc057.contest.atcoder.jp/tasks/abc057_d 题意:给出n个数,可以选择x~y个数,使其平均值最大,求其最大平均数以及选择方案数. 思路:只考虑两种情况即可: 1. 最大的数出现次数大于x, 那么最大平均数及为最大数,选择方案数为C(b[0], i)  x<=i<=min(y, b[0]); //其中b[0]为最大数出现的次数 2. 最大数出现的次数小于x, 那么我们只需要考虑最末尾那个数即可; 代码: #include <io…
http://acm.hdu.edu.cn/showproblem.php?pid=6114 [思路] 就是求C(m,n) [板] #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; ; i…
题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的递推式,分奇偶讨论 得到一个函数\(P_{n,m}\equiv\left\{\begin{matrix}n\\m\end{matrix}\right\}\% 2\) 再根据函数递推式通过画图,数形结合 转化成图中从一点走到另一点的方案数 变成组合问题求解 做法 这是给连插板都不会的我看的 \(a_1…
目录 语法 c++ java 动态规划 多重背包 最长不下降子序列 计算几何 向量(结构体) 平面集合基本操作 二维凸包 旋转卡壳 最大空矩形 | 扫描法 平面最近点对 | 分治 最小圆覆盖 | 随机增量法 三维向量(结构体) 三维凸包 几何杂项 数据结构 ST表 单调队列 树状数组 线段树 并查集 左偏树 珂朵莉树,老司机树 莫队 二叉搜索树 一些建议 图论 图论的一些概念 图论基础 最短路径 最小生成树 树论的一些概念 最近公共祖先 联通性相关 图上的NP-hard问题 弦图+区间图 | 最…
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪…
题目链接 一个人初始在(0, 0), 想到(n, m)去, 没到一个格子, 花费的值为C(n, m), 求最小值. C(n, m)的定义为, 如果n==0||m==0, 则为1, 否则C(n, m) = C(n-1, m)+C(n, m-1). 很容易看出来贪心的策略, 先横着或竖着走max(m, n)个格子,代价为max(m, n)+1, 然后在竖着或横着走,代价是一个组合数, C(n+m+1, min(n, m) )-1. 组合数用lucas算就好. #include <iostream>…
n中选m个模M,M为多个素数之积 $n, m, k (1 \leq m \leq n \leq 10^{18}, 1 \leq k \leq 10)$,$M = p_1 · p_2 · · · p_k ≤ 10^{18}$,$p_i \leq 10^5$ 由于n,m很大组合数自然想到lucas,但是如果直接用M会因为M太大lucas就没什么用了,所以考虑以构成M的素因子为模数分别对组合数的lucas构建k个同余方程,这样就能得到模M下组合数了.了解题目意思后就很裸了 注意每个不同模数下的逆元.阶…
题目大意: 给定n m 在n个数中最多选择m个的所有方案 #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f #define LL long long ; ; /********组合数模板*********/ LL pow_mod(LL a, LL b) { LL res = 1LL; a %= mod; while(b){ ) res = res * a % mod; a = a * a % mod; b…
坑爹的,,组合数模板,,, 6132 njczy2010 1412 Accepted 5572 MS 50620 KB C++ 1844 B 2014-10-02 21:41:15 J - 2-3 Trees Time Limit: 12000/6000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description 2-3 tree is an elegant data st…
是我想复杂了 首先发现大于关系构成了一棵二叉树的结构,于是树形dp 设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1}^{si[i*2]} \) 组合数用Lucas求 #include<iostream> #include<cstdio> using namespace std; long long n,p,f[5000005],jc[5000005],s[5000005]; long long ks…
hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m)    设 S(n,m)=C(n,0)+C(n,1)+C(n,2)+...+C(n,m) 然后将S(n,m) 通过 第一个公式 拆项 最后化简 变为 S(n,m)=2*S(n-1,m)-C(n-1,m); 即: 所以可以离线用莫队算法 参考博客:链接1.链接2 代码: #include <bits/stdc+…
背景 经过一天天的等待,终于迎来了\(CQOI2018\),想想\(NOIp\)过后到现在,已经有了快要半年了,曾经遥遥无期,没想到时间一转眼就过去了-- 日志 \(Day0\) 因为明天就要考试了,早上来了一发模拟考,考得心态炸裂--不过横向对比了一下,同校的同学考得也差不多的样子,所以还算是有一点安慰吧--(什么,你问我具体分数?) 下午去试机,发现\(GUIDE\)用不起,所以只能用\(CodeBlocks\),然后对字符串心虚的我决定打一发后缀数组,然后果然啊,错误连篇--我是不是该滚粗…
2019年1月8日 1.Luogu P2147 [SDOI2008]洞穴勘测 (LCT模板题&LCT学习) 2019年1月9日 2.LuoguP3203 [HNOI2010]弹飞绵羊  (LCT模板题II&LCT进一步学习)   2019年1月10日 3.P3690 [模板]Link Cut Tree (动态树) 4.P2387 [NOI2014]魔法森林  (动态树维护最小生成树) 又颓了一个早上,这样下去布星啊,要被暴打啦 5.P2168 [NOI2015]荷马史诗 (哈夫曼树模板题)…
#include <cstdio> #define LL long long LL finmo=; LL fac[][],inv[][]; LL tmp[],rev[]; LL n,g,x,y; ]={,,,}; LL qpow(LL bas,LL pow,LL mo){ LL ret=; ){ ) ret*=bas,ret%=mo; } return(ret); }//快速幂 LL C(LL t1,LL t2,LL mopo){ ); return((fac[mopo][t1]*inv[mo…
HDU 5794 - A Simple Chess题意: 马(象棋)初始位置在(1,1), 现在要走到(n,m), 问有几种走法 棋盘上有r个障碍物, 该位置不能走, 并规定只能走右下方 数据范围: ( 1 ≤ n,m ≤10^18, 0 ≤ r ≤100 )    分析: 分析不存在障碍物时的走法规律:                      (1,1)                  1              (2,3) (3,2)                      1  …
时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数位dp 的介绍 数位 dp 其实就是让你处理出某一区间范围内满足条件的数的个数,但是一般这个区间范围都是令人绝望的大...比如 1e9 都算良心了,常规的都是 1e18 甚至是 1e10n (n 一般为 3 或 5)次这样的... 数位dp 的一般解法 那么我们知道肯定不能在区间内一个个去判断数字是…
题意简介 没什么好说,就是让你求出 1 ~ n 之间每个数转化为二进制后 '1' 的个数,然后乘起来输出积 题目分析 emmmm.... 两种解法(同是 $O(\log^2 N)$ 的算法,组合数效率完爆 数位dp,当然是我自己的数位dp). 组合数直接艹.(数据范围8e9 能过,其实这个东西你搞一搞 __int128 什么的再找个大质数也许也能过去啦)(好吧这个直接暴力预处理组合数的数组就好了) 老老实实数位dp.(可以AC) 于是翻车了...这么久 算法实现 1. 组合数  组合数非常好做,…
题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一个质数),那么有: \begin{aligned}S(n,k)&=\sum_{i=0}^k\binom{n}{i} \\&=\sum_{i=0}^k\binom{n\bmod p}{i \bmod p}\binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \f…
传送门 看到组合数在模 $2$ 意义下的乘积,考虑用 $lucas$ 定理把组合数拆开 $lucas$ 告诉我们,$C(n,m)$ 在模 $k$ 意义下的值,相当于 $n,m$ 在 $k$ 进制下每一位的组合数分别相乘的积在模 $k$ 意义下的值 就是若 $n=\sum_{i=0}a[i]k^i$,$m=\sum_{i=0}b[i]k^i$,其中 $a[i],b[i] \in [0,k-1]$ ,那么 $C(n,m) \equiv \prod_{i=0}C(a[i],b[i])\ \ (mod\…