以下除法一律为整除。

求\(\sum_{i=0}^kC_n^i\ mod\ p,p=2333\)

设\(f(i,j)=\sum_{k=0}^jC_i^k\)

\(f(n,k)=\sum_{i=0}^kC_n^i\)

当\(k\le p,n\le p\),预处理\(0\le i\le p,0\le j\le i\)的\(C_i^j\)及其前缀和。

否则

\(f(n,k)\)

\(=\sum_{i=0}^kC_{n\ mod\ p}^{i\ mod \ p}\times C_{n/p}^{i/p}\)

\(=\sum_{b=0}^{k/p-1}\sum_{i=0}^{p-1}(C_{n\ mod\ p}^i\times C_{n/p}^{b})+C_{n/p}^{k/p}\times(\sum_{i=0}^{k\ mod\ p}C_{n\ mod\ p}^i)\)

\(=\sum_{b=0}^{k/p-1}C_{n/p}^{b}\times\sum_{i=0}^{p-1}C_{n\ mod\ p}^i+C_{n/p}^{k/p}\times(\sum_{i=0}^{k\ mod\ p}C_{n\ mod\ p}^i)\)

\(=f(n/p,k/p-1)\times \sum_{i=0}^{p-1}C_{n\ mod\ p}^i+C_{n/p}^{k/p}\times f(n\ mod\ p,k\ mod\ p)\)

\(f(n/p,k/p-1)\)递归,\(\sum_{i=0}^{p-1}C_{n\ mod\ p}^i\)预处理过了,\(C_{n/p}^{k/p}\)直接lucas定理,\(f(n\ mod\ p,k\ mod\ p)\)也预处理过了。

code:

#include<bits/stdc++.h>
using namespace std;
const long long p=2333;
int T,C[p+10][p+10],sum[p+10][p+10];
long long n,k;
int Lucas(long long x,long long y){//C_x^yif(y>x)return 0;if(x<=p&&y<=p)return C[x][y];return Lucas(x/p,y/p)*C[x%p][y%p]%p;
}
int F(long long x,long long y){if(y>x)y=x;if(!y)return 1;if(y<0)return 0;if(x<=p&&y<=p)return sum[x][y];return (F(x/p,y/p-1)*sum[x%p][p-1]%p+Lucas(x/p,y/p)*sum[x%p][y%p]%p)%p;
}
int main(){C[0][0]=sum[0][0]=1;for(int i=1;i<=p;++i)for(int j=0;j<=i;++j)C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%p;for(int i=0;i<=p;++i)for(int j=0;j<=p;++j)sum[i][j]=((j?sum[i][j-1]:0)+C[i][j])%p;scanf("%d",&T);while(T--)scanf("%lld%lld",&n,&k),printf("%d\n",F(n,k));return 0;
}

转载于:https://www.cnblogs.com/xryjr233/p/BZOJ4591.html

[2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改相关推荐

  1. [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)

    大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...

  2. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)

    注意到模数很小,容易想到使用卢卡斯定理,即变成一个2333进制数各位组合数的乘积.对于k的限制容易想到数位dp.可以预处理一发2333以内的组合数及组合数前缀和,然后设f[i][0/1]为前i位是否卡 ...

  3. 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)

    [BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...

  4. P4345 [SHOI2015]超能粒子炮·改

    P4345 [SHOI2015]超能粒子炮·改 题意: 求解式子∑i=0kCni%p\sum_{i=0}^{k}C_{n}^{i} \% p∑i=0k​Cni​%p n,k<=1e18 题解: ...

  5. 【[SHOI2015]超能粒子炮·改】

    就是运用\(Lucas\)推一个柿子 首先是前置芝士\(Lucas\)定理 \[C_{n}^{m}\%p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}\%p\] 至于证明 我建议去问一下 ...

  6. [SHOI2015] 超能粒子炮·改

    题目链接:戳我 设\(f[n][k]=\sum_{i=0}^kC_n^i\pmod {2333}\) 那么根据卢卡斯定理我们知道\(f[n][k]=\sum_{i=0}^kC_{n/p}^{i/p}\ ...

  7. loj2038「SHOI2015」超能粒子炮・改(卢卡斯的理解和延伸+数位dp)

    我们发现暴力+裸的卢卡斯可以骗到50分 所以就应该朝卢卡斯的方向去想. 卢卡斯是把n,k拆成两个p进制数进行统计的. 注意到如果在某一位ai>nia_i>n_iai​>ni​,a表示 ...

  8. P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】

    正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 TTT组询问,给出n,kn,kn,k求 ∑i=0k(ni)\sum_{i=0}^{k}\bino ...

  9. 超能粒子炮·改 HYSBZ - 4591

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4591 就是求:                    C(n,0)+C(n,1)+... ...

最新文章

  1. 替换不文明词语和非法字符
  2. LeetCode实战:二叉树中的最大路径和
  3. 【Python基础】Python正则表达式入门到入魔
  4. [Buzz.Today]2013.03.14
  5. 关于Early-Z Culling(提前Z拣选)
  6. php中join用法,PHP join()函数用法与实例讲解
  7. java 画金刚石_帮忙改错!java 画金刚石
  8. python range函数怎么表示无限_python range函数怎么用
  9. 想让自己的网站变得精致吗?那就进来看看吧:跟随鼠标的天使
  10. APE代码解读系列(四)
  11. 超级P2P搜索引擎使用教程和下载地址
  12. 华为云服务器测试并用docker快速搭建2048网站
  13. MVP实现Recy多条目展示
  14. matlab怎么求标准化特征向量,matlab特征向量标准化
  15. 法国学术会议申根签证办理(因私)
  16. 卡罗林斯卡医学院计算机方向,卡罗林斯卡医学院:全球卫生专业受学生欢迎
  17. NAS 网络错误0x8007003B的解决方案
  18. 【东大自控笔记1】闭环控制系统及传递函数求解
  19. MySql 5.7 详细参数说明
  20. 动词ing基本用法_动词ing形式的用法及练习题(归纳整理,含答案).ppt

热门文章

  1. golang中的strings.Compare
  2. Linux内核开发工作方向
  3. 1.STM32中对LED_GPIO_Config()函数的理解(自定义)之流水灯
  4. 常考数据结构与算法:最长公共子串
  5. 线程安全: 互斥锁和自旋锁(10种)
  6. Zabbix 自定义Item经常Not Supported解决
  7. 7_linux下PHP、Apache、Mysql服务的安装
  8. IT行业: 嵌入式工程师的进阶之路
  9. 拦截导弹(最长递增子序列)
  10. 田志刚:人跟人差距怎么那么大呢?