正题

题目链接:https://www.luogu.com.cn/problem/P4345


题目大意

TTT组询问,给出n,kn,kn,k求
∑i=0k(ni)\sum_{i=0}^{k}\binom{n}{i}i=0∑k​(in​)
对233323332333取模的值

1≤T≤105,1≤k≤n≤10181\leq T\leq 10^5,1\leq k\leq n\leq 10^{18}1≤T≤105,1≤k≤n≤1018


解题思路

因为模数很小,可以考虑用LucasLucasLucas定理,然后考虑怎么优化复杂度。
对于给出的n,kn,kn,k分成两个部分,第一部分是由kkk前面若干段长度为PPP的整段构成,这一部分的答案我们发现对于C⌊nP⌋⌊mP⌋×Cm%pn%pC_{\lfloor\frac{n}{P}\rfloor}^{\lfloor\frac{m}{P}\rfloor}\times C^{n\%p}_{m\% p}C⌊Pn​⌋⌊Pm​⌋​×Cm%pn%p​这两个值,后面那一个值的和是确定的,是∑i=1kCn%pk\sum_{i=1}^kC_{n\%p}^k∑i=1k​Cn%pk​,前面那一部分的值我们可以递归下去计算。

然后第二部分是剩下的散段,这个部分我们也是自直接递归下去算就可以了

时间复杂度O(Tlog⁡n)O(T\log n)O(Tlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll P=2333;
ll n,k,t,S[P][P],C[P][P];
ll Lucas(ll n,ll k){if(!k)return 1ll;if(!C[n%P][k%P])return 0;return Lucas(n/P,k/P)*C[n%P][k%P]%P;
}
ll solve(ll n,ll k){if(k<0)return 0;if(n<P)return S[n][min(n,k)];ll tmp=solve(n/P,k/P-1)*S[n%P][n%P]%P;tmp=(tmp+solve(n%P,k%P)*Lucas(n/P,k/P)%P)%P;return tmp;
}
signed main()
{C[0][0]=S[0][0]=1;for(ll i=1;i<P;i++)for(ll j=0;j<=i;j++)C[i][j]=((j?C[i-1][j-1]:0)+C[i-1][j])%P;for(ll i=1;i<P;i++){S[i][0]=C[i][0];for(ll j=1;j<=i;j++)(S[i][j]=S[i][j-1]+C[i][j])%=P;}scanf("%lld",&t);while(t--){scanf("%lld%lld",&n,&k);printf("%lld\n",solve(n,k));}return 0;
}

P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】相关推荐

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

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

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

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

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

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

  4. [2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改

    以下除法一律为整除. 求\(\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}^k ...

  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. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)

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

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

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

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

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

最新文章

  1. Elasticsearch Aggregation 多个字段分组统计 Java API实现
  2. 下列那些是oracle的伪列,oracle伪列
  3. vb.net2019-上传文件
  4. ASP NET Core --- HTTP 翻页、过滤、排序
  5. java技术分享主题_Java开发入门:适合新手练手的Java项目(附源码下载)
  6. 基于android的课程画图设计,基于Android的智能终端通信勘察设计系统绘图模块的设计与实现...
  7. (005)CSS选择器的具体性与层叠
  8. 14个非常有用的jquery技巧,注意事项和最佳实践
  9. chrome自动发送邮件插件
  10. 阿酷三合一版_阿酷插件3.2开源版
  11. flash对联广告代码: 两边显示 不移动 可关闭
  12. Jmeter设置之ramp-up
  13. 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作!还有人...
  14. 阿里企业邮箱:密码登录
  15. 未来教育计算机二级2020年9月有几套题,未来教育】2021年9月全国计算机二级office题库国二计算机等级考试上机考试真题计算机二级msoffice2021年考试备考三月教材九2016...
  16. 牛客入门编程—金字塔图案
  17. 计算机开机显示屏节能,电脑显示屏显示节能模式怎么处理
  18. Linux命令06 - - wget 下载网络文件
  19. PCB板设计之Altium Designer了解以及电子设计基础知识
  20. 对于win7上共享的文件在工作组的其他电脑上无权限访问的问题解决,以及工作组电脑无需密码登入访问设置

热门文章

  1. python作业题目用户输入行数、输出倒的等腰三角形_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)作业期末考试答案...
  2. 囊括计算机 电子信息仿真技术,什么是虚拟现实?
  3. yaml for java_细数Java项目中用过的配置文件(YAML篇)
  4. mysql数据库连接_mysql数据库连接池配置教程
  5. mysql表类型_MySQL表类型的选择
  6. python数据导入hive_Python操作HIve,将数据插入到Mysql
  7. 7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!
  8. [MyBatisPlus]条件构造器wapper
  9. [RabbitMQ]MQ 的分类
  10. Strategy(策略)--对象行为型模式