(ex)Lucas总结

普通Lucas

\[C_n^m\;mod\;p
\]

其中\(n,m,p\leq 10^5\)其中\(p\)为质数

公式不难背,那就直接背吧。。。

\[C_n^m\;mod\;p=C_{n\;mod\;p}^{m\;mod\;p}*C_{n/p}^{m/p}
\]

如果\({n\;mod\;p}<{m\;mod\;p}\)就直接\(return\;0\)

  1. int Lucas(int n, int m) {
  2. if (!m) return 1;
  3. else return 1ll * C(n % Mod, m % Mod) * Lucas(n / Mod, m / Mod) % Mod;
  4. }

exLucas

设\(p=\prod {p_i}^{k_i}\)

如果我们可以求出每个\(C_n^m\;mod\;{p_i}^{k_i}\)就可以直接\(crt\)合并了

因为

\[C_n^m=\frac{n!}{m!(n-m)!}
\]

所以问题转化为求几个阶乘以及阶乘的逆元。

所以关键在于如何快速求阶乘

为了方便统计出现了多少个\(p\)的次幂,我们先将阶乘中所有的\(p\)提出来。

可以简单的算出共有\(\left\lfloor\frac np\right\rfloor\)个,中间每一项都除\(p\)

可得\(\left\lfloor\frac np\right\rfloor!\)可以递归求解。

对于不可以提出来的,可以发现他们都对于\(mod\;p^k\)有一个循环节

把循环节中的和不在其中的暴力算就行了

部分代码

  1. ll fac(ll n, ll pi, ll pk) {
  2. if (!n) return 1;
  3. ll res = 1;
  4. for (ll i = 2; i <= pk; i++)
  5. if (i % pi) res = res * i % pk;
  6. res = fpow(res, n / pk, pk);
  7. for (ll i = 2; i <= n % pk; i++)
  8. if (i % pi) res = res * i % pk;
  9. return res * fac(n / pi, pi, pk) % pk;
  10. }
  11. ll CRT(ll b, ll p, ll Mod) { return b * inv(p / Mod, Mod) % p * (p / Mod) % p; }
  12. ll C(ll n, ll m, ll pi, ll pk) {
  13. ll fz = fac(n, pi, pk), fm1 = fac(m, pi, pk), fm2 = fac(n - m, pi, pk);
  14. ll k = 0;
  15. for (ll i = n; i; i /= pi) k += i / pi;
  16. for (ll i = m; i; i /= pi) k -= i / pi;
  17. for (ll i = n - m; i; i /= pi) k -= i / pi;
  18. return fz * inv(fm1, pk) % pk * inv(fm2, pk) % pk * fpow(pi, k, pk) % pk;
  19. }
  20. ll exlucas(ll n, ll m, ll Mod) {
  21. ll res = 0, tmp = Mod;
  22. for (int i = 2; 1ll * i * i <= Mod; i++)
  23. if (tmp % i == 0) {
  24. ll pk = 1; while (tmp % i == 0) pk *= i, tmp /= i;
  25. res = (res + CRT(C(n, m, i, pk), Mod, pk)) % Mod;
  26. }
  27. if (tmp > 1) res = (res + CRT(C(n, m, tmp, tmp), Mod, tmp)) % Mod;
  28. return res;
  29. }

(ex)Lucas总结的更多相关文章

  1. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  2. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  3. 大组合数:Lucas定理

    最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...

  4. HDU 5446 中国剩余定理+lucas

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  5. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

  6. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

  7. hdu 5446 Unknown Treasure Lucas定理+中国剩余定理

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  8. hdu 3037 Saving Beans Lucas定理

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  10. BZOJ4176: Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

随机推荐

  1. POJ 2407 Relatives 欧拉函数题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  2. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  3. Kafka TimeoutException: Batch Expired 问题排查

    当前系统中produer配置request.timeout.ms=30000(30秒),但是broker端配置zookeeper.connection.timeout.ms=1000000,kafka ...

  4. selenium以及浏览器驱动下载安装

    1.下载selenium压缩包 http://pypi.python.org/pypi/selenium 下载后压缩在python文件下的lib>site-package文件夹下 2.进入sel ...

  5. ListView 中的TextView实现跑马灯效果

    案例:怎么样在一个ListView中含有TextView的item中实现字母滚动呢.这个在一些特定的场合经常用得到.如下图,当焦点位于某个item的时候其内容就自动滚动显示 要实现这样的效果,废话不多 ...

  6. 结合cocos2d-x开发配置sublime text

    开发cocos2d-x前端的非核心开发人员对于编辑器的选择,多数的选择有两个,一个是传统的ultraedit,另外的就是现在很流行的sublime text.以前我是比较喜欢用ultraedit的,但 ...

  7. Android小游戏应用---撕破美女衣服游戏

    ImageView after; ImageView before; @Override protected void onCreate(Bundle savedInstanceState) { su ...

  8. iOS12适配及问题记录,Debug正常使用,Release数据为nil的报错

    Debug模式数据一切正常,打包出去的ipa,Release模式下数据为nil的错误,经排查,buiding中的Optimization Level, Release设为None,解决问题. IOS1 ...

  9. Oracle分析函数(一)

    (一)分析函数语法 function_name(<argument>,<argument>...) over(<partition by clause><or ...

  10. poj1733 Parity Game(扩展域并查集)

    描述 Now and then you play the following game with your friend. Your friend writes down a sequence con ...