礼物
  • 题意:

    • 求\[C(n,m)\ \%\ p\]
    • \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k]{p_i}^{c_i}\le 10^5.\)
  • 注意到若\[p=\prod_{i=1}^{k}{p_i}^{c_i},则\forall i\in [1..k]{p_i}^{c_i}\le 10^5.\]

  • 于是有一个经典套路就是,求出\(k\)组\(A_i=C(n,m)\% {p_i}^{c_i}\),最后用中国剩余定理求解.

  • 注意到若中国剩余定理求出一组特解为\(Ans\),则\((Ans+kp)\)为其通解.

  • 由于\(p\)不保证为质数,所以我们需要对\(C(n,m)\)拆式子,然后把含\(p\)的与不含\(p\)的质因子分开算.

  • 于是问题转化为求\(n!\),我们以\(p^c\)个数为一组,不难发现,把含\(p\)质因子的数筛出去后每一组的乘积在模\(p^c\)意义下是一样的.

  • 这个证明很显然,因为每一组都可以表示为\((k*p^c+1,k*p^c+2,\cdots,(k+1)*p^c)\).

  • 于是发现含有\(p\)的质因子又是一个阶乘.

  • 所以分治处理.

  • 注意这里对于模数非质数的求逆元方法:

  • 我们要求\(x\)关于\(m\)的逆元,实质上就是\(ax + km = 1\)的解.

  • 然后我们可以求得这个\(a\),用拓展\(gcd\)即可.

ll Exgcd(L a, L b, L &x, L &y) {if (!b) { x = 1, y = 0; return a; }L d = Exgcd(b, a % b, x, y), z = x;x = y, y = z - y * (a / b); return d;
} //拓欧ll CALC(L st, L en, L k) { L s = 1;F(i, st, en) if (i % sta[k].p) s = (s * i) % sta[k].up;return s;
}ll calc(L n, L k) {if (n <= sta[k].p) return CALC(1, n, k);L k1 = calc(n / sta[k].p, k); //分治求解L k2 = CALC(1, min(sta[k].up - 1, n), k); //每sta[k].up个分一组,这是一个循环节if (n > sta[k].up) {L k3 = CALC((n / sta[k].up) * sta[k].up + 1, n, k); //计算循环节余剩的return (k1 * ksm(k2, n / sta[k].up, sta[k].up) * k3) % sta[k].up;}else return (k1 * k2) % sta[k].up;
}ll count(L n, L p) { return n < p ? 0 : n / p + count(n / p, p); } //分治计算含p质因子个数ll Inv(L t, L p) {L d, x, y; d = Exgcd(t, p, x, y); //求逆元return (x % p + p) % p;
}ll C(L x, L y) {L ss = 0;F(i, 1, cnt) {L s1 = calc(x, i), s2 = (calc(y, i) * calc(x - y, i)) % sta[i].up, tot; //计算x!/y!(x-y)!s1 = s1 * Inv(s2, sta[i].up) % sta[i].up; //与sta[i].up互质,所以用拓欧求逆元.tot = count(x, sta[i].p) - count(y, sta[i].p) - count(x - y, sta[i].p); //计算含p质因子个数s1 = s1 * ksm(sta[i].p, tot, sta[i].up) % sta[i].up; //快速幂一下G[i] = {s1, sta[i].up}; //一组方程}F(i, 1, cnt) {L Mi = p / sta[i].up;ss = (ss + ((G[i].a * Mi % p) * Inv(Mi, G[i].mo))) % p; //构造一组特解}return ss == 0 ? p : (ss % p + p) % p; //通解
}
  • 此题是很好的思维+数论模板题.

转载于:https://www.cnblogs.com/Pro-king/p/9383516.html

礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)相关推荐

  1. 同余2:线性逆元和中国剩余定理的学习笔记

    同余2:逆元和中国剩余定理的学习笔记 逆元 中国剩余定理 扩展中国剩余定理 前言 上一次,我讲到了求解线性同余方程,并挖了一个线性求逆元的大坑,现在补上吧. 逆元 逆元的定义:若 a ∗ x ≡ 1 ...

  2. 中国剩余定理(孙子定理)+ exgcd求逆元

    中国剩余定理   中国剩余定理又叫孙子定理.在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之 剩二(除以7余2) ...

  3. 学习拓展中国剩余定理小结

    前言 话说中国剩余定理好早就会了,但是一直木有接触过拓展的. 只知道它是个什么东东. 最近似乎需要它了,稍微学了学,似乎还挺简单的. 小结一下~ 简介 中国剩余定理我们都懂吧? 而拓展则是把它后面的模 ...

  4. ACM数论----中国剩余定理与拓展中国剩余定理

    一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...

  5. 数论-中国剩余定理(crt) 与拓展中国剩余定理(excrt)

    中国剩余定理(crt) [用途] 求方程组中最小的非负整数解X X ≡ { a 1 ( m o d m 1 ) a 2 ( m o d m 2 ) . . . a n ( m o d m n ) X\ ...

  6. 同余定理 逆元 中国剩余定理 费马小定理

    同余定理 同余定理是数论中的重要概念.给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m). 两个整数a ...

  7. 【原创】 中国剩余定理 和 拓展中国剩余定理

    孙子 Preface 数论学习Part 7. 每天进步一点点,退役不会太丢脸. 联赛只剩十五天,隔靴搔痒智何添? 剩余定理四天一篇,动归图论又几何,数据结构似云烟. 莫再等闲,莫忘时间. CRT 我们 ...

  8. 中国剩余定理拓展中国剩余定理

    复习 中国剩余定理: x ≡ a 1 ( m o d m 1 ) x ≡a_1(mod m_1) x≡a1​(modm1​) x ≡ a 2 ( m o d m 2 ) x ≡a_2(mod m_2) ...

  9. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

最新文章

  1. 问题解决:Apache: You don't have permission to access / on this server
  2. scrapy分布式去重组件源码及其实现过程
  3. 51nod 1118 机器人走方格 解题思路:动态规划 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
  4. jzoj1158-荒岛野人【扩欧,gcd,同余方程】
  5. Java线程start()vs run()方法及示例
  6. Python Pytest前置setup和后置teardown详解
  7. Bootstrap 两端对齐的导航
  8. Fragment学习2--简单的添加Fragment
  9. “/etc/profile“ 无法保存 E212: Can‘t open file for writing
  10. MFC实现文字随鼠标移动
  11. Lumion 9.0 动画渲染的10个技术技巧
  12. 实现回到顶部功能的三种方法
  13. 尝鲜体验win11,附赠win11镜像下载地址
  14. PID闭环底盘调试记录
  15. Python-自学爬虫篇
  16. 怎么把电脑上的python软件卸载干净_如何将电脑上的各种软件彻底卸载干净呢?...
  17. QQ群推广的13杀招
  18. 手机安装linux模拟器教程,Ubuntu下安装Android模拟器
  19. html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
  20. 经典SQL--求一年有多少天

热门文章

  1. CentOS7 0安装jdk + tomcat
  2. jpa postgresql 使用uuid作为主键
  3. 性能测试工具MultiMechanize的使用介绍
  4. cnetos6,centos7添加新网卡,系统不识别的解决办法
  5. [转] Windows 下校验 Fedora 安装文件
  6. [IOS] Storyboard全解析-第一部分
  7. C/C++中extern关键字详解[zz]
  8. C#窗体控件-按钮控件Button
  9. div内的button的click会触发两次(防止事件冒泡)
  10. cisco路由器基本实验之九 PAT的配置(Packet Tracer)