题目链接

BZOJ3738

题解

复习

同上

但是为了消去因子\(10\),处理\(2^k\)的时候,乘回\(2^{k_1}\)时,应同时计算\(5^{k_2}\)

如果\(k_1 \ge k_2\),乘上\(5^{k_2}\)的逆元

如果\(k_1 < k_2\),乘上\(5^{k_1}\)的逆元

处理\(5^k\)的时候同理

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<iomanip>
  6. #include<cstdio>
  7. #include<cmath>
  8. #include<map>
  9. #define LL long long int
  10. #define REP(i,n) for (int i = 1; i <= (n); i++)
  11. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  12. #define cls(s,v) memset(s,v,sizeof(s))
  13. #define mp(a,b) make_pair<int,int>(a,b)
  14. #define cp pair<int,int>
  15. using namespace std;
  16. const int maxn = 2000005,maxm = 100005,INF = 0x3f3f3f3f;
  17. LL pr[2],pk[2],fac[2],P,k1,k2,now;
  18. inline LL qpow(LL a,LL b,LL p){
  19. LL re = 1;
  20. for (; b; b >>= 1,a = 1ll * a * a % p)
  21. if (b & 1) re = 1ll * re * a % p;
  22. return re;
  23. }
  24. inline void exgcd(LL a,LL b,LL&d ,LL& x,LL& y){
  25. if (!b){d = a; x = 1; y = 0;}
  26. else exgcd(b,a % b,d,y,x),y -= (a / b) * x;
  27. }
  28. inline LL inv(LL n,LL p){
  29. LL d,x,y; exgcd(n,p,d,x,y);
  30. return (x % p + p) % p;
  31. }
  32. inline LL Fac(LL n,LL P,LL p){
  33. if (!n) return 1;
  34. LL ans = 1;
  35. if (n / P) ans = qpow(fac[now],n / P,P);
  36. LL E = n % P;
  37. for (LL i = 2; i <= E; i++)
  38. if (i % p) ans = 1ll * ans * i % P;
  39. return 1ll * ans * Fac(n / p,P,p) % P;
  40. }
  41. inline int C(LL n,LL m,int pk,int p){
  42. now = (p == 5);
  43. LL a = Fac(n,pk,p),b = Fac(m,pk,p),c = Fac(n - m,pk,p),ans;
  44. ans = 1ll * a * inv(b,pk) % pk * inv(c,pk) % pk;
  45. if (p == 2){
  46. if (k1 >= k2)
  47. ans = 1ll * ans * qpow(inv(5,pk),k2,pk) % pk * qpow(2,k1 - k2,pk) % pk;
  48. else ans = 1ll * ans * qpow(inv(5,pk),k1,pk) % pk;
  49. }
  50. else {
  51. if (k1 >= k2)
  52. ans = 1ll * ans * qpow(inv(2,pk),k2,pk) % pk;
  53. else ans = 1ll * ans * qpow(inv(2,pk),k1,pk) % pk * qpow(5,k2 - k1,pk) % pk;
  54. }
  55. return 1ll * ans * (P / pk) % P * inv(P / pk,pk) % P;
  56. }
  57. inline LL exlucas(LL n,LL m){
  58. for (LL i = n; i; i /= 2) k1 += i / 2;
  59. for (LL i = m; i; i /= 2) k1 -= i / 2;
  60. for (LL i = n - m; i; i /= 2) k1 -= i / 2;
  61. for (LL i = n; i; i /= 5) k2 += i / 5;
  62. for (LL i = m; i; i /= 5) k2 -= i / 5;
  63. for (LL i = n - m; i; i /= 5) k2 -= i / 5;
  64. LL re = 0;
  65. re = (re + C(n,m,pk[0],pr[0])) % P;
  66. re = (re + C(n,m,pk[1],pr[1])) % P;
  67. return re;
  68. }
  69. int main(){
  70. LL N,M,K;
  71. cin >> N >> M >> K;
  72. pr[0] = 2; pr[1] = 5; pk[0] = pk[1] = P = 1;
  73. REP(i,K) pk[0] *= 2,pk[1] *= 5,P *= 10;
  74. fac[0] = 1; for (LL i = 2; i < pk[0]; i++) if (i % 2) fac[0] = 1ll * fac[0] * i % pk[0];
  75. fac[1] = 1; for (LL i = 2; i < pk[1]; i++) if (i % 5) fac[1] = 1ll * fac[1] * i % pk[1];
  76. cout << setfill('0') << setw(K) << exlucas(N + M,N) << endl;
  77. return 0;
  78. }

BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】的更多相关文章

  1. BZOJ3738 : [Ontak2013]Kapitał

    $C_{N+M}^N=\frac{(N+M)!}{N!M!}$ 考虑求出$ans\bmod 10^9$的值 $10^9=2^9\times5^9$ 以$2^9$为例,先预处理出$1$..$2^9$中不 ...

  2. bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]

    4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...

  3. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

  5. 扩展CRT +扩展LUCAS

    再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...

  6. BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)

    没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...

  7. Codeforces.100633J.Ceizenpok's formula(扩展Lucas)

    题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...

  8. P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】

    题目链接:传送门 题目: 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其 ...

  9. 【learning】 扩展lucas定理

    首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...

随机推荐

  1. 2017-2018-2 20155224『网络对抗技术』Exp7:网络欺诈防范

    基础问题回答 问:通常在什么场景下容易受到DNS spoof攻击? 同一局域网下,以及各种公共网络. 问:在日常生活工作中如何防范以上两攻击方法? 答:DNS欺骗攻击是很难防御的,因为这种攻击大多数本 ...

  2. WPF编程,自定义鼠标形状的一种方法。

    原文:WPF编程,自定义鼠标形状的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8727 ...

  3. windows系统中Dotnet core runtime 安装后,无法启动次程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll的解决方法

    因为dotnet core runtime依赖vc++2015,如果系统未安装vc++2015则会报上面的错误 解决方案:先下载安装vc++2015再安装dotnet core runtime, vc ...

  4. 升级webpack2

    更新:webpack3已经出来了,官方说从2到升级到3不用改一行配置,98%的人没有错误. 项目中用的是webpack1.webpack2已经出来一段时间了.决定升级.其实改动不是很大.修改加测试共花 ...

  5. 生成本地测试用https证书,支持通配符和多域名,初学OpenSSL

    18-01-26在v2ex上看到一妹纸发的<身为一个 21 岁的年轻程序员,我已经腰突了(躺>,哈哈,感同身受,想到这几天我左腿麻木持续了好几天,前几天屁股疼的只要坐下就站不起来,不过站着 ...

  6. 通过C#的HttpClient模拟form表单请求

    post提交表单一般无非是一般text文本和文件类型,如下 <input type="file"/> <input type="text"/& ...

  7. 一次VB汇编中看-溢出计算

    图文记录 一.观察程序特点和运行逻辑 带弹窗 是VB开发的 需要用户名和注册码 有弹框 具备了很简单的特点…… 错误弹框,如图 二.定位 弹窗内容入手,搜索关键字定位到关键跳,nop掉或者je改jne ...

  8. 推荐一个MacOS苹果电脑系统解压缩软件

    废话少说,直入主题: 连接:https://www.keka.io/en/ 开源免费好用(个人觉得比betterzip好用哈),附一张这货的图标:

  9. GitHub 新手教程 六,Git GUI 新手教程(3),从GitHub远端同步代码库

    从GitHub把代码库下载到本地: 1,打开 GitGUI,单击我们之前克隆好的本地库: 2,按图片所示点击,同步远端代码: 3,出现如下提示后,点击“Close”: 4,上面只是把代码下载下来,还没 ...

  10. 华为笔试——C++平安果dp算法

    题目:平安果 题目介绍:给出一个m*n的格子,每个格子里有一定数量的平安果,现在要求从左上角顶点(1,1)出发,每次走一格并拿走那一格的所有平安果,且只能向下或向右前进,最终到达右下角顶点(m,n), ...