正题

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


题目大意

\(T\)组询问,给出\(n,k\)求

\[\sum_{i=0}^{k}\binom{n}{i}
\]

对\(2333\)取模的值

\(1\leq T\leq 10^5,1\leq k\leq n\leq 10^{18}\)


解题思路

因为模数很小,可以考虑用\(Lucas\)定理,然后考虑怎么优化复杂度。

对于给出的\(n,k\)分成两个部分,第一部分是由\(k\)前面若干段长度为\(P\)的整段构成,这一部分的答案我们发现对于\(C_{\lfloor\frac{n}{P}\rfloor}^{\lfloor\frac{m}{P}\rfloor}\times C^{n\%p}_{m\% p}\)这两个值,后面那一个值的和是确定的,是\(\sum_{i=1}^kC_{n\%p}^k\),前面那一部分的值我们可以递归下去计算。

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

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


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. bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]

    4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...

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

    \(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...

  3. 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理

    题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...

  4. [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

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

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

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

    P4345 [SHOI2015]超能粒子炮·改 题意:求$\sum_{i=1}^{k}C(n,i)\%(P=2333)$ 肯定要先拆开,不然怎么做呢(大雾) 把$C(n,i)$用$lucas$分解一下 ...

  7. 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告

    P4345 [SHOI2015]超能粒子炮·改 题意 求\(\sum_{i=0}^k\binom{n}{i}\),\(T\)组数据 范围 \(T\le 10^5,n,j\le 10^{18}\) 设\ ...

  8. BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理

    BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理 Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以 ...

  9. loj 2038 / 洛谷 P4345 [SHOI2015] 超能粒子炮・改 题解

    好玩的推式子 题目描述 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒子炮・改相比超能粒子炮,在威力上 ...

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

    传送门 看到数据和模数大小就知道要上 lucas 了 然后开始愉快地推公式: 答案为 $\sum _{i=0}^kC_{n}^{i}\ (mod\ 2333)$ 设 $f [ i ] [ j ] = ...

随机推荐

  1. Specification排序orderby

    废话不多说直接贴代码 Specification<Course> sf = new Specification<Course>() { @Override public Pre ...

  2. asp.net core 知识点总结

  3. 关于Ubuntu18.04 linux系统使用搜狗输入法 出现乱码

    解决: 执行下面的命令即可!无需重启系统 killall fcitx

  4. CSS定位(慕课网学习笔记)

    定位模型 static自然模型 relative相对定位模型 absolute绝对定位模型 fixed固定定位模型 sticky磁铁定位模型 possition之static(默认的设置)(静态定位. ...

  5. J2EE之DAO设计模式及简单实现

    JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端: 客户 ...

  6. TCP通信的实现代码

    TCP通信 概念 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 从百科定义中就可以看出,TCP通信的基本条件 ...

  7. elementUI+nodeJS环境搭建

    一. ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的, 所以饿了吗推出了基于VUE2.0的组件库,它的名 ...

  8. CSP-J&S 2020挂分记

    应该是退役记 OI 是一门玄学--考后有感 Day -inf 找各科老师请假备考,看着我倒一倒二的好成绩分纷劝我放弃竞赛,成功请到了假. Day -1 怎么莫名其妙大家都在学些奇怪的东西? 跟风写了一 ...

  9. 最详尽的 JS 原型与原型链终极详解(1)(2)(3)===转载

    转载===方便以后复习 原文网址:https://www.jianshu.com/p/dee9f8b14771 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为 ...

  10. TCP协议中的TIME_WAIT详细说明

    文章目录 4.3设置TIME_WAIT状态的目的 4.3.1 实现TCP全双工连接的关闭 4.3.2 使过时的重复报文段失效 4.3.3 TIME_WAIT状态的自结束 4.3.4 TIME_WAIT ...